Allow override of throttle key computation

Combined creating the throttle key and hash computation into `ComputeThrottleKey` method. `ComputeThrottleKey` is `virtual` allowing for developers to override it as they see fit.

I'm currently using this approach to generate a custom key which is then passed directly into Redis without computing the hash of the key. This gives me the ability to know what is being throttled and for whom by looking at Redis key list.

I also refactored some of the code. See the commit titled 'Refactor code to increase readability' and 'Use member ThrottlePolicy instead of passing it around'.