[dm-bio-prison] rewrite to use an red black tree

Previously it was using a fixed sized hash table.  There are times
when very many concurrent cells are held (such as when processing a
very large discard).  When this happens the hash table performance
becomes very poor.

Conflicts:
	drivers/md/dm-bio-prison.h
[dm-thin] Fix race between releasing cell and incrementing deferred set.

Needs merging with earlier direct submission patches