Renamed List[A].mapNonEmpty(List[A] => B): Option[B] to calcIfNonEmpty, closes #178
Renamed Map[K, V].mapNonEmpty(Map[K, V] => B): Option[B] to calcIfNonEmpty
Added [A].calcIf(Predicate[A])(A => B): Option[B]
Added List[A].mapIfNonEmpty(A => B): Option[List[B]], closes #179
Added [A].calcPF(PartialFunction[A, B]): Option[B]
Added List[List[A]].cartesianProduct: List[List[A]], closes #86