Update internal API to use standard Guzzle setup

The main change is around usage of a RequestFactory rather than creating
inline in the client. This also lets us remove individual calls to
`setClient` etc to correctly setup the request decorators.
Update project files
Update readme
Move tests up a directory