Simplify `RedisCommandExecutor` and `RedisConnection`
Motivation:
RedisCommandExecutor was a complex and "wordy" name that was not 100% clear as to how it relates to other types.
RedisConnection also has not had a strong use case shown for it to exists as a separate protocol - using up a great name for the "out of the box" implementation.
Result:
RedisClient instead of RedisCommandExecutor is more clear as to what it is, in Redis terminology, a communication client.
RedisConnection as a concrete class provides an identifiable basic block for making connections to Redis.
RedisConnection also saw some fixes to close() while having some names and comment blocks tweaked for updated naming.