Add mapMaybe and mapMaybeWithKey (issue #59)

They share the implementation with filter and filterWithKey, without affecting their structure reuse.

This fixes issue #59.
Have you verified that these are equivalent from a performance perspective (i.e. by running the `filter` Criterion benchmarks before/after this change)? There's extra allocation going on here (of the `Just` constructor) and unless GHC's SpecConstr optimization removes it, I'd expect `filter` to be slower than before.