A Map is a cross between an array and a hash. It does not have O(1) element
access like a hash, but its elements are ordered. This Map is a BinaryTree,
but an ideal Map would probably be an RB Tree.
TODO: Perhaps it would be nice to be able to customize what kind of
implementation we get when we ask for a map? Perhaps Map should just be
a constructor for other classes?