Retry package based on Sean's composition design with essential logical refinements / fixes

Added more tests, custom error structs and fixed logic in essential parts: For this introduced a tristate as decision output of retrier and specified an evaluator for composed strategies.

We use three output values, Retry, Ignore and Abort. To evaluate composed strategies:

```
// We retry (output Retry) if one or more retriers evaluate to Retry and none says Abort 
// To output Retry some can also evaluate to Ignore as long as one evaluates to Retry.
// If all evaluate to Ignore we will return Ignore (this should be output for a successful attempt whose response will be returned as is and we may stop retrying).
// If one evaluates to Abort we'll return Abort regardless what the others returned
```

To optimize the evaluation by the strategies.RetryBy function we make use of arithmetic properties of the values representing the states.


I'm not a fan of using arithmetic operations based on the underlying type and a non-zero initial value.  I'll fix this up before merge.