Clone is required because most non-trivial Functor implementations
will need to clone their inner type. Eq and Hash are required to
allow for Functor implementations involving maps and sets. It was
determined that Hash was a less burdensome requirement than Ord.