constants: Add attach/detach and UUID constant

Modify Haskell code to accept the attach/detach action and the "UUID"
disk parameter. Also, modify the _ConvertNicDiskModifications function
to accept the new DDM_ATTACH/DDM_DETACH values. Finally, do minor
changes in Python code and tests in order to make the tests pass.
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

Add checks for:
* item type, i.e. raise an error if attach/detach is applied to a NIC,
* number of arguments,
* instance's compatibility with disk template/nodes

and update existing ones.
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 the start/stop
functionality is erroneously used first by other functions (e.g. rename)
and then tested on its own.