change parameter order for combinators that take a function/value and a parser:
 - function/value first, then parser
 - this affects `mapError`, `catchError`, and `commit`, and `optional`
 - this makes it consistent with `fmap` and `app`
 - `bind` is a natural exception since its function parameter returns a parser
   that is logically run after the first parser, so its parser parameter should
   come first
add context to error messages in example parsers:

 - treat errors as a stack of (message, position) pairs
 - when an error happens, each hierarchically containing rule
   adds its bit to the error