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.


Ah OK. sure. Didn't think about that. This kind of explanation should probably better with the struct definition anyway.