Add mapMaybe and mapMaybeWithKey (issue #59)

They share the implementation with filter and filterWithKey, without affecting their structure reuse.

This fixes issue #59.
The benchmark didn't show any noticeable difference. Moreover, a quick scan of the generated core for `filterWithKey`, suggests that there is no extra allocation for the `Maybe`:
````haskell
  Data.HashMap.Base.Leaf _ [Occ=Dead] dt1_dbV2 [Occ=Once]
                                            dt2_dbV3 [Occ=Once] ->
     case pred_aa4I dt1_dbV2 dt2_dbV3 of _ [Occ=Dead] {
       GHC.Types.False -> Data.HashMap.Base.Empty @ k_aazH @ v_aazI;
       GHC.Types.True -> wild_X3x
     };
````
I suspect that even without SpecConstr, the compiler can spot that the `Maybe` constructors are matched immediately after being generated and don't need to be allocated.