Allow override of store key computation

Added a `ComputeStoreKey` method in `ThrottlingHandler` which handles generating the store key. This value is what's passed to `ComputeHash`.

The intent of this is to allow for using the throttle key generated as the store key (example in Redis). This doesn't breaking existing functionality. This gives users the ability to use the store key list as a report of what's being throttled and for whom. 

I also refactored some of the code. See the latest commit titled 'Refactor code to increase readability'.