Refactor and update tests

Lots of refactoring, updates the tests to run again (still fails 2 tests), and adds support to pass the options hash through in post requests.
Why not use literal syntax?

```ruby
@parsed_response = {
  :code => raw_response.code,
  :message => raw_response,
}
```