Add tests for when

Really don't like the fact that `attempt` and `lift` have to be defined for each argument count, when are we getting variadic generics with compile time type mapping...