Provide a base non-MonadResource API

These commits introduce a 'Base' API which doesn't require the use of `MonadResource` and *resourcet*. The base API functions live in some `MonadIO` instance instead.

The existing API isn't changed: most functions in the original API are now re-exports of base API functions, with a slightly more restrictive signature (adding a `MonadResource` constraint).

Whilst the base API uses `create*` and `release*` functions, the existing API still uses `MonadResource` to create/release resources as before.

For review purposes, using `git diff` with `--find-copies-harder` is recommended.