lightnvm: removed show_pool debug code
lightnvm: Refactor garbage collection into configurable module

Previously, the algorithm was hard-coded, core<=>GC interaction is
now mediated through a vtable and GC-related data structures have
been separated out - enabling other GC algorithms to be designed
and evaluated with greater ease.
lightnvm: Further refactoring of GC

GC decoupling also required moving work structs previously tied
directly to nvm_{block,pool} and the GC-related data structures
(a prio_list from pool and a 'prio' entry in block).
Moving this required allocating GC-specific data structures which
entails creating additional initialization code, providing an
interface through which CORE and the target type can interact with
the GC -- collectively requiring additional changes.
lightnvm: integration into block layer

Make lightnvm an intrinsic part of the block layer.

A queue can be LightNVM managed. When managed, on init bio to rq, the
lightnvm mapping fn is called. Similar to when IO is completed, the
completion function is called.

Detection of LightNVM managed queue is through q->queue_flags &
QUEUE_FLAG_LIGHTNVM, and device driver may signal its initialization
through BLK_MQ_F_LIGHTNVM.