disklabel.py: Rename Disklabel cls to Disk

The Disk class hosts the partitioning info of a Disk, namely an MBR
instance as well as an Disklabel instance.

For disklabels define 2 different classes:

 * BSDDisklabel
 * OpenBSDDisklabel

The first represents the traditional *BSD disklabel and the latter the
altered version found in newer releases of OpenBSD.

For now, only OpenBSDDisklabel is implemented.
disklabel.py: Add main() function & fix input opts

Add a main() function that works as entry point and rephrase the help
text in some input options
disklabel.py: Add BSDDisklabel format fields

Add the partition table fields and the format field for the BSDDisklabel
class. The body of the class is not implemented yet
disklabel.py: Abstract the PartitionTable class

Create a PartitionTableBase class that will host the common code for the
PartitionTable classes of the two Disklabel classes.
disklabel.py: Abstract the Disklabel class

 * Create a DisklabelBase class that the two Disklabel classes will
   subclass
 * Move common code to the base class
 * Cleanup the derived classes
disklabel.py: Add code for printing BSDDisklabels

Add basic support for traditional BSD disklabels
disklabel.py: Small fixes in MBR class

 * Add missing method comments
 * Inline all MBR fields comments
 * Print partition type in hex
disklabel.py: Use abc.ABCMeta on the base classes

Make PartitionTableBase and DisklabelBase classes abstract by using the
ABCMeta metaclass of the abc module
disklabel.py: Define lba2chs() on Disklabel class

This method converts an LBA address to CHS. Different BSD systems do
this in different ways:

 * NetBSD uses LBA-Assisted translation but OpenBSD does not.
 * For addresses over 8GB where CHS will overflow, OpenBSD will assign
   a fixed value on all 3 CHS fields when NetBSD will do this only for
   the cylinders field.
disklabel.py: Add support for enlarging NetBSD

 * Implement new NetBSDDisklabel and FreeBSDDisklabel classes that
   subclass BSDDisklabel class.
 * Add methods for enlarging the disk and the last partition in
   NetBSDDisklabel
Support NetBSD in FixPartitionTable task
disklabel.py: Print BSD->Linux partition mapping

Add an input option in disklabel.py to print the partition mapping the
Linux kernel would do on the disklabel.
Fix BSD to Linux partition mapping

The mapping we used would fail in some cases. If a BSD partition
has the same boundaries with an MBR one, the kernel will not map it
onto a different block device. As a result, partition 'a' is sometimes
mapped onto /dev/sda1 and sometimes onto /dev/sda5.
disklabel.py: Add function for printing warnings
disklabel.py: Fix OpenBSD part end when enlarging

When enlarging OpenBSD partitions, round them up to multiples of 16512
which is the default fs blocksize. This is what OpenBSD's disklabel
does when creating partitions.
Support NetBSD in FilesystemResizeUnmounted task

Add support for resizing UFS file systems of NetBSD OSs