API method extracted to an interface

Simple change here - simply defined an interface for the API methods.

Currently there is only one possible implementation for this, the one given. This would allow the client to define their own implementations for the API.

One idea that I toyed with, and I have been sitting on the fence about is whether the interface should necessitate a Storage object. In the end I leaned toward flexibility, and let the implementor decide.

Cheers!