lightnvm: An open FTL for open firmware SSDs

LightNVM implements the internal logic of SSDs within the host system.
This includes logic such as translation tables for logical to physical
address translation, garbage collection and wear-leveling.

It is designed to be used either standalone or with a LightNVM
compatible firmware. If used standalone, NVM memory can be simulated
by passing timings to the dm target table. If used with a LightNVM
compatible device, the device will be queued upon initialized for the
relevant values.

The last part is still in progress and a fully working prototype will be
presented in later patches.
lightnvm: initial hints support

Adds support for swap, latency and pack hints.

Signed-off-by: Aviad Zuck <aviadzuc@tau.ac.il>