Support for Seagate Kinetic Drives

This changes are needed to implement FsDatasetSpi from outside the HDFS repo and build an HDFS DataNode that can handle drives using the Seagate Kinetic API.

Blocks transfers got abstracted to a factory given that the behavior will be changed for DataNodes using Kinetic drives. The existing DataNode to DataNode block transfer functionality got moved to LegacyBlockTransferer, no new configuration is needed to use this class and have the same behavior that is currently present.

DataNodes using Kinetic Drives will have an additional configuration key DFS_DATANODE_BLOCKTRANSFERER_FACTORY_KEY to override this behavior.