Initial details and writeup
Provide pure error semantics to `Env.parse`

Previously when Env.parse failed it would throw an exception. That's
really annoying in Haskell, even if we're in IO. We update it now to
return purely reporting which name it failed to look up.
Implemented the new parser such that the tests pass

Also provided some explicit documentation for the `parse` function.