Begun generalised sum type implementation.

Eventually, maybe and either should be changed into simple type aliases
of sum_type, e.g.: using maybe = sum_type<Just<T>,Nothing>;