Port of Data.Map to scalaz

This is a port of Haskell's Data.Map into scalaz. There are a few things
that need to be considered regarding the usage of sys.error (as per the
implementation in Haskell. It would be advantageous to have all functions
total.

Additionally there are some functions that might still be required, but
the majority of the useful functions have been provided. Feedback is
greatly appreciated.

Signed-off-by: Gary Pamparà <gpampara@gmail.com>
Don't mix context bounds and implicit params for 2.9.x

Signed-off-by: Gary Pamparà <gpampara@gmail.com>
Correct a typo resulting in switched partitioning.

Thanks to @xuwei-k for pointing this out. Added additional tests to check this
more thoroughly.

Signed-off-by: Gary Pamparà <gpampara@gmail.com>
Added mapOption and mapEither functions.

Signed-off-by: Gary Pamparà <gpampara@gmail.com>
Seal traits added only for implicit priority.
Seal implicit-priority traits generated for syntax.
Make DList a final class.
Make \/ a class.
Make Leibniz & Liskov sealed classes.
Missing explicit types.
Class-ify Alpha, BKTree, BijectionT, CaseInsensitive, CharSet, Coproduct.
Class-ify EitherT, LazyOption, & NonEmptyList.
Class-ify EphemeralStream, InsertionMap, LazyOptionT, Tree.
Finalize left, right.
Finalize SwitchingDisjunction.
Classify Either3.
Class-ify Zipper.
IndexedReaderWriterStateT is a class.
Replace datatypes' Instances traits with classes.
Class-ify Digit, PLens, TreeLoc.