Updating for use as an imported module in addition to cli.

Why? I'd like to be able to use this programatically.

I updated as little of the functionality as possible in this PR. I added the `Makefile` as a helper, as building with this abstraction is slightly more complicated than a simple `go build`. Upon request, I can omit the `Makefile` as I've added build instructions to the `README.md`.

Cheers,
J