Lift binary functions to arbitrary input types

Use fallback result if types mismatch.
Requires GHC 7.7+ (closed type families & data kinds)