Add nodes field in class Disk

Add a field called "nodes" in the Disk class. This field will be a list
of Ganeti node UUIDs from which this disk is accessible. Also, update
the Haskell tests in order to adjust to this change.
Populate disk nodes when creating disks

When creating a Disk using the GenerateDiskTemplate function, fill the
nodes field depending on the disk template. There are three cases:

1) Internally mirrored disks (DRBD):
   These disks are accessible from two nodes, so the nodes field will
   include these. Their children (data, meta) are also accessible from
   two nodes, therefore they will inherit the nodes of the parent.
2) Externally mirrored disks (Blockdev, Ext, Gluster, RBD, Shared File):
   These disks should be accessible from any node in the cluster,
   therefore the nodes field will be empty.
3) Single-node disks (Plain, File):
   These disks are accessible from one node only, therefore the nodes
   field will consist only of the primary instance node.
Maintain consistency of nodes field

There are four scenarios in which the nodes field can change after the
disk's creation; when moving, replacing, converting or recreating disks.
For each scenario, update the nodes field accordingly.
Update cfgupgrade tool

Create an upgrade function that adds a nodes field to each disk that is
attached to an instance. Also, add a downgrade function that removes the
nodes field and brings the config to the default state for 2.12.
Update various tests regarding disk creation

Update the tests that deal with disk creation and check if the nodes
field is populated correctly when creating a disk.
Add "detach" parameter in DDM

Modify Haskell code to generate a `_constants.py` file with the "detach"
parameter in it.
Add DDM_DETACH in cmdlib/client code

With this behavior, when the "detach" disk parameter is passed, the disk
will be removed and destroyed.
WIP: Add _DetachDisk function in cmdlib/instance.py

This is the main point where all the detach work will happen.
Create _DetachDisk function in cmdlib

The _DetachDisk function is similar to _RemoveDisk, with the exception
that nothing destructive happens on the disks.
Update detach code

Remove disk from instance when detaching, but do not remove it from the
config file.
Add attach action and UUID parameter in Haskell
Add attach functionality

Currently, it fails on WaitForSync.
Fix attach function
Add initial _CheckAttachDisk/_CheckDetachDisk
Use the existing UnlockedAttachInstanceDisk

Do not provide our own solution, which after all is buggy, when there is
an existing one.