os/bluestore: Refactor of write path. New punch_hole_2 function.
Introducing new logic of Onode processing during write.
New punch_hole_2 function empties range, but keeps track of elements:
- allocations that are no longer used
- blobs that are now empty
- shared blobs that got modified
- statfs changes to apply later
This change allows to reuse allocation for deferred freely, which means
that we can use allocations in deferred mode in other blob then they come from.