Generalized combinators

See #60
Generalized perform function

See #60
Generalized mapPhase

See #60
Experimentally changed articulation types

This is the approach advocated in #60, with some problems:

* Type signatures are unreadable (even while using abbreviations)
* MonadPlus' requirement is to general (we just need Pointed and Monoid')