Added function.or(Predicate[A]*): Predicate[A]
Added [A].passesOne(Predicate[A]*): Option[A], closes #79
Added function.and(Predicate[A]*): Predicate[A]
Added [A].passesAll(Predicate[A]*): Option[A], closes #77
Added [A].failsOne(Predicate[A]*): Option[A]
Added [A].failsAll(Predicate[A]*): Option[A], closes #78
Added classTag.className[A]: String
Added classTag.simpleClassName[A]: String
Added classTag.klassOf[A]: Class[A]
Added inputStream.gunzip: GZIPInputStream, closes #138
Added outputStream.gzip: GZIPOutputStream, closes #137
Added List[A].unsnocC(=> B, List[A] => A => B): B, closes #157
Added MultiMap[F, K, V].sliding(Int): F[MultiMap[F, K, V]]
Added MultiMap[F, K, V].flatMapValues(V => G[W]): MultiMap[G, K, W]

This generalizes the previous MM.flatMapValues by now allowing the container type to change.
Implemented by copying Unapply from scalaz.
Refactor: replaced {passes|fails}{One|All} with {passes|fails}.{one|all}
Added function.nand(Predicate[A]*): Predicate[A]
Added [A].passes.none(Predicate[A]*): Option[A], [A].fails.none(Predicate[A]*): Option[A]
Added function.nor(Predicate[A]*): Predicate[A]
Added [A].passes.some(Predicate[A]*): Option[A], [A].fails.some(Predicate[A]*): Option[A]
Merge branch 'master' into 2.9

Conflicts:
	core/src/main/scala/pimpathon/array.scala
	core/src/main/scala/pimpathon/java/io/OutputStream.scala
	core/src/main/scala/pimpathon/multimap.scala