Combinators

I need to tidy up the patchset, but creating that PR to start the discussion on the new API.