Move replicateM, replicateM_, and filterM to Applicative

`replicateM`, `replicateM_`, and `filterM` entail full traversals without termination.  They can thus be implemented without `bind` while preserving existing behavior.

As such, I moved them from `Monad` to `Applicative`, tweaking context bounds and such accordingly.