add otter.util.retry.should_retry_effect

This is just a little helper function for gluing some of otter.util.retry to effect.retry -- specifically the ability to call the "can_retry" functions, and the interval-with-delay.

This makes use of a new intent I added to the Effect library, "Delay", which allows effectful code to "sleep" without needing to parameterize the clock.

This branch depends on the pure-http-refinements branch for no good reason other than that branch updates the effect dependency to 0.1a7 which this branch also depends on, and I didn't want to cause a conflict. So to see JUST the changes from the branch, click here: https://github.com/rackerlabs/otter/compare/pure-http-refinements...retry-effects
sadly, no, because it's not a FuncIntent of can_retry, it's a FuncIntent of a lambda that should_retry_effect creates.

I think the testing here is sufficient because it actually executes the can_retry function by using .perform_effect(None), but that being said this is the kind of wart that comes about from using FuncIntent -- as the documentation for FuncIntent says:

    Note that FuncIntent is something of a cop-out. It doesn't follow the
    convention of an intent being transparent data that is easy to introspect,
    since it just wraps an opaque callable. This has two drawbacks:

    - it's harder to test, since the only thing you can do is call the
      function, instead of inspect its data.
    - it doesn't offer any ability for changing the way the effect is
      performed.

    If you use FuncIntent in your application code, know that you are giving
    up some ease of testing and flexibility. It's preferable to represent your
    intents as inert objects with public attributes of simple data. However,
    this is useful for integrating wih "legacy" side-effecting code in a quick
    way.