Added LightNVM opcodes and implemented NOOP handlers for each command
implemented most of the single-page commands - time to implement address table R/W
nvme: initialization function now properly initialises channel information
nvme: implemented sync & async erase commands with bounds checking - metadata handling ignored
nvme: added lnvme logic for NS init/format. Fixed bug in nvme_format_namespace, meta_start_offset should be updated on format (possible LBA change)
nvme: lnvme_get_p2l_tbl command implemented, along with on-disk format changes
nvme: adjusted size of identify & identify channel structs and ensured they are packed to avoid overflowing the 4KB buffer limit
nvme: fixed incorrect initialisation of lnvme id channel information
nvme: the distinction between responsibility and extension is unecessary, furthermore, the same code relied on all values being packed
nvme: fixed indentation issue in code
nvme: revised set_responsibility function, defined default values for features & extensions
nvme: fixed error in lnvme_identify and changed default lnvme version to 1. LNVME-compatible devices use a non-zero version of the spec
nvme: fixed indentation mismatches...
nvme: additional indentation fixes
nvme: lnvme identify channel now displays accurate read/write/erase granularity values derived from the selected LBAF
nvme: if LNVME device - driver maps one namespace per channel - effectively letting 'lchannels' property override 'namespaces' property
nvme: fixed offset error in LnvmeGetTbl
nvme: set bit 4 of OACS to 1 iff LNVME device
Revert "nvme: if LNVME device - driver maps one namespace per channel - effectively letting 'lchannels' property override 'namespaces' property" -- misunderstanding.

This reverts commit 629c732d43cb17a233d456406b41a7defeaec6fd.
nvme: bugfix, variable size inconsistency