Wrap up parser in data-type. This is an experiment only.

Goals:
 - Check what sort of perf inpact wrapping up the recursion has.
 - Clean-up, and wrap up some of the uglies in the parser, should
   allow nice isolation of mutation as required.
 - Free[Parser, A] it up, see if eliminating stack usage speeds
   things up (it should, but not sure if it will be enough to
   counteract the cost of wrapping up all the parsers).