btrfs: manage free dev_extents with rb_tree.

Currently, when we want to find a free dev_extent for new chunk,
we have to find a hole in device tree. The logic of searching
all holes between each two dev_extents is very complex. And we
need to read from device again and again, it will create lots of
IOs. It's a routine with low-performance and hard to understand
and maintain.

This patch introduces a structure of free_dev_extent_tree to each
btrfs_device. It means each device has a rbtree to manage the free
dev_extents of itself. In this way, when we need a new free dev_extent
for a new chunk, we just need to find a node with enough free space  in this
rbtree. It can speed up the processes which is finding a free dev_extent
and search some more information about free dev_extents. Also, as the
each node in this rbtree represent a free dev_extent, the logic of searching
is more simple than searching btree of dev_extents and checking the all holes
between each two dev_extents.

Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>