Reduce bound on mtl and switch ExceptT to EitherT

Running with mtl > 2.2 causes cabal problems in some cases because it
requires transformers 0.4.* which conflicts with the 0.3 version in ghc
7.8 (which doctest depends on, for example). This causes the travis build
for 7.8 to fail, though for some reason the 7.6 version is OK.

Compatibility with mtl 2.1 (and transformers 0.3) is probably a good idea
anyway, but requires that use of ExceptT is dropped, since this isn’t
available. EitherT is now used instead and Control.Monad.Except replaced
with the deprecated Control.Monad.Error for now.