Fast recovery

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.