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.
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.
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.
client: Add attach/detach
cmdlib: Change API for AssembleInstanceDisks
cmdlib: Add attach/detach
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.