Changed Env.Parser to use ByteStrings

Strings are the easiest string type to use, but they also have performance
issues. ByteString is much faster and covers the possibility of non-unicode
data being stored in the ENV.

We'll also be able to efficiently base parsers off the ByteString representation unlike String.
Upgraded Env.parse interface to classify the error

This lets us include the notion of a parsing failure! We'll use that
to add a layer of deserialization to environment parsing.
Introduce FromEnv class to parse many common types

FromEnv is the class of all types which can be deserialized from the
environment. At its most basic it includes String/ByteString/Text and
their lazy variants, but it also includes numeric types and, in the future,
may contain other basic variants as well.

This also includes generalizing how the ParserF functor works to include
variations on what exact parsing function is being selected to do the
parsing. Each different kind of error is collected at the end.

All together we can parse types of class FromEnv, FromJSON, or Read.