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, 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 test 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.

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.