Splitting combinators

This is a kind of port of Haskell's [`Data.List.Split`](http://hackage.haskell.org/package/split)—it provides more or less the same functionality, but the implementation differs significantly. I'm happy to publish it as a separate library, but I've found myself wanting these pieces often enough that I thought it'd be worth trying a pull request here.