Extends onMatch to behave as a monad transform

With this change onMatch checks the return type of its callback and acts
as a monad transform (like flatMap) if the returned value is another
parser.  Otherwise onMatch acts as a functor transform as before.

Also adds an accept() function that produces a parser that always
matches and that consumes no input.  This pairs with the monad behavior
of onMatch.
Uses WeakMap to resolve each parser exactly once
Merge pull request #3 from hallettj/more-monad-please

Extends onMatch to behave as a monad transform
Merge pull request #4 from hallettj/lazier

Uses WeakMap to resolve each parser exactly once