Provide a parse tree view to solve issue #12

Add a `tryParseTree()` method to `Parser`. The code has been tested against a relatively complex project of mine. The result is satisfactory to me. You can review the test cases to see the result.
oh, i used or() to ignore unrecognized tokens in my last work, didn't think it could log failed match. that is interesting. but i do think that approach is a little counter-intuitive.

i didn't know exception construction is the most expensive part. so it seems this part must be rewritten. however, i leave the choice to you and arnaud. if you guys think a new api for non-exception-throwing is good enough to have, i will write a new api. if you think it's not worth it, i can live with that too. we have or() combinator anyway.