First draft of fast recovery feature

When an allocator throws an exception from its allocate method, the particular
slot in question is poisoned. This means that a PoolException will be thrown,
with the allocators exception as a cause, when someone tries to claim that
particular slot.

Now, if an allocator is having trouble for some time, then the entire pool can
end up full of poisoned slots, so when the allocator recoves - perhaps the
network was down? - it will the pool-size in claims before it is completely
cleared of poison.

This is not particularly helpful. If the allocator has recovered, what use are
those old exceptions?

These changes lets the allocation threads proactively try to clear the pool of
poison, in an attempt to speed up recovery of the pool as a whole.
Note a todo about only agressively reallocating slots that are actually poisoned, and also make the timings more agressive in the allocator threads
Do not frivolously reallocate non-poisoned slots during eager recovery.
Finalise the fast recovery feature.

I think the implementation is pretty good now. Just one TODO is left hanging,
but I don't think it's important to resovle before merging.
Merge pull request #65 from chrisvest/fast-recovery

Fast recovery