Add (and refactored) inverse of enumeration

Changed Reverse interface (now invariant in type)
Added implementation of basic combinators
Added tests for product and maps