commute and commuteMap

Been thinking this over for a while (see #441). The utility of `commute` in Array-of-Array scenarios is not obvious--but `commute` shines in situations where you want to convert a list of Functors (Maybe, Either, even Promise?, etc.) to a Functor of a list. 

ya apologies, counting is hard