`Either` and `EitherType`

This implementation of `Either` was adapted from https://github.com/robrix/Traversal. `EitherType` is a new addition intended to allow functions to generically receive `Either`, a conforming `Result` type, etc.