config: Use disk name to get its info

Change the GetDiskInfo API to accept a second parameter called
`disk_name`, so that users can search a disk by its name, instead of its
UUID. The search algorithm follows below:

* Iterate all disks in config:
  - Compare their name with the provided name.
  - If there is a match, increment a counter and store the disk.
* Once all disks have been checked, if the counter is 1, return the
  stored disk.
* Else, there are more than one disks with the same name, or none
  at all. In this case, raise a proper exception.
config: Fix docstring of _UnlockedGetInstanceNodes

The list for non-DRBD instances is never empty. It always contains the
primary node of the instance.
cmdlib: Turn index code to functions

Convert the index operations that are used in "add" to functions, so
that they can be used by "attach" later on.
cmdlib: Return RPC result in AssembleInstanceDisks

The AssembleInstanceDisks function uses internally the
call_blockdev_assemble RPC call. Its result is useful to the caller, so
we return it in array format.
constants: Add attach/detach and UUID constant

Modify Haskell code to accept the attach/detach action and the "UUID"
disk parameter. Also, make minor changes to Python code and tests in
order not to break the codebase.
client: Add attach/detach in disk modifications

Essentially, use the DDM_ADD logic for DDM_ATTACH and the DDM_REMOVE
logic for DDM_DETACH.
config: Create wrappers for attach/detach ops

The _UnlockedAttachInstanceDisk and _UnlockedDetachInstanceDisk
functions are already used in the add and remove operations. Create
wrappers that can be used by attach and detach operations in order to
call only these functions.
cmdlib: Add checks for attach/detach.

The checks have to do with the number of arguments, template/nodes
compatibility between instances and disks etc. Also, we explain to the
user that tries to use the attach/detach mechanism for NICs that it does
not apply to them yet.
cmdlib: Add core attach/detach logic

Extend _ApplyContainerMods to accept an attach and detach function.
These functions operate in the same way as the add and detach functions,
minus the disk creation and disk removal parts.

Also, update the tests in order to work with the new _ApplyContainerMods
function.
burnin: Test if attach/detach works properly

The attach/detach test is merged with the add/remove test. The test is
the following: an extra disk is added in each instance and is given a
random name. Once it's added successfully, we detach it and check if the
instance operates normally. Then, we pick instances randomly and attach
a detached disk to them, using an algorithm that matches a disk to an
instance based on its disk nodes. Then, we remove the disk.

Also, move the start/stop at the top of the tests, since it the
start/stop functionality is erroneously used first by other functions
(e.g. rename) and then tested on its own.