Refactor parser.rs to simplify it and propably fix multiple bugs.
"Nested" or "delimited" parsers can now only be used in a closure given to the corresponding `Parser` method. This allows doing cleanup after calling the closure, rather than in a `Drop` implementation. This more local reasoning makes thing easier to understand and less likely to be buggy.