Make `ConnectionSpy` and `RedisSpy` easier to extend

This updates the `ConnectionSpy` and `RedisSpy` that it uses and
makes them easier to extend. This simplifies their interfaces and
makes it so a redis spy can be optionally passed in. This allows
creating a custom redis spy and using that with a connection spy.
This also moves the `RedisSpy` out from under the `ConnectionSpy`
so it is simpler to inherit from. All of this makes the spy more
usable as a base that can be extended with custom behavior.

@kellyredding - Ready for review. Most of the diff is changing the indention of the `RedisSpy` since it is no longer under `ConnectionSpy`. The only thing that changed with the `RedisSpy` is it is no longer passed calls.