Remove instance of MonadRandom and MonadState for EitherT.
Use multiway if.
Use elem and lists instead of ||.
Major overhaul with lots of gotos.