reiser4: add an implementation of "block lists", splitted off the discard code.

The block list is a less memory efficient, but ordered (and thus sortable)
implementation of the same concept as the blocknr_set.

Signed-off-by: Ivan Shapovalov <intelfx100@gmail.com>
reiser4: discard support: refactor to use blocknr_list, optimize per-atom memory consumption.

->discard_set is replaced by combination of already existing ->delete_set and
newly added ->aux_delete_set, containing extents deallocated without BA_DEFER
(i. e. blocks of the wandered journal). When discard is enabled, storage of
both delete sets is enabled. They are stored using blocknr_lists, which are
spliced and sorted before discarding.

Otherwise, only ->delete_set is maintained, and it is stored using blocknr_set
which is more memory efficient but inherently unordered (so it cannot be used
for the discard algorithm).

The only semantic-significant change to existing code is that
reiser4_post_commit_hook() does not clear ->delete_set (instead, it is cleared
either by discard_atom() or as part of atom's destruction). This is OK because
->delete_set is not accessed after reiser4_post_commit_hook().

Signed-off-by: Ivan Shapovalov <intelfx100@gmail.com>