Adds a bunch of nice stuff

* Adds tests that try to be as decoupled from the code as possible
* Adds more generic requests
* Abstracts the endpoints
* Adds basic auth support
Actually, the reason to do it like this was that it does a get by default. Even if no `http_method` is passed. But I'll do the change anyway and force the caller to specify a verb. Ok?