V2

Main Changes:
Always use a task to execute the action. This is so that the operation is consistent regardless of if a timeout is requested or not.

Made State an internal set so that unit tests can put the breaker into any state 

Make the configuration immutable (by removing the public get property) so that the circuit breaker config cannot be re-configured once created.