Add push API

So I added the push API. I also scrubbed the `util` namespace, as it had a `pipe` function which wasn't used anywhere, and the remaining function I moved to the `api` namespace.

This PR is just an offer - if you want to merge these changes, please let me know and I'll refork and provide a clean commit history in a new PR. Of course, if you're happy to merge it as is, you could do that too.

I haven't written any tests.