Use symbolic constants more widely, for readability

--HG--
extra : amend_source : ca3adc7f8e317f8db73170b08bc145247fa752ec
Switch to a peek-driven version of value

This drops use of the (<|>) combinator, and greatly reduces the
extent to which we allocate unused thunks. As a result, it improves
both runtime and heap usage significantly.

--HG--
extra : rebase_source : 62bc8759400db5a2bc644f5da3fe19c0d10d5d96
Switch the value' parser away from backtracking
Simplify the value parser

If we've already peeked at a byte, we don't need to check its value
a second time.