Update `TestClient`, track all calls made with it

This updates `TestClient` to track all calls that it makes. This
is so it can act as a spy and users can check that a call was made
with the expected name and params. This also updates the
`TestClient` to have a `reset` method that will clear its calls
and remove all of its configured stored responses. This is so
this one method can be called in a test teardown. This makes it
easier if a client is re-used instead of having to manually clear
the calls and keep up with all the configured responses.