Start allowing different merging types to be applied

After user data handling splits apart all the different
content types into there various mime messages it is
nice to be able to have each message specify how it should
be merged (mainly for cloud-config or cloud-archive) into
the single cloud config that is eventually used. This 
starts to add a plugable merging framework and the
needed components to activate said headers and merging.
Continue working on merging prototype.
Select merge-type from either header or content after loading as yaml.
Continue work.
Change the yaml merge header extraction to be in a sep. function that can look in more places.
Adjust naming and exception catching.
Add which files the yaml blob came from.
Allow mergers to take options.
More cleanups.
Support resizing btrfs filesystems.

The existing code has two issues with btrfs:

1) The command to resize a btrfs filesystem uses a path to the mount
   point, not the underlying device:

   $ btrfs filesystem resize max /dev/vda1
   ERROR: unable to resize '/dev/vda1' - Inappropriate ioctl for device
   Resize '/dev/vda1' of 'max'
   $ btrfs filesystem resize max /
   Resize '/' of 'max'

2) The code that is given a path and finds the ID of the device where
   the path is mounted doesn't work for btrfs:

   Use /proc/$$/mountinfo to find the device where path is mounted.
   This is done because with a btrfs filesystem using os.stat(path)
   does not return the ID of the device.

   Here, / has a device of 18 (decimal).
  
     $ stat /
       File: '/'
       Size: 234               Blocks: 0          IO Block: 4096   directory
     Device: 12h/18d   Inode: 256         Links: 1
     Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
     Access: 2013-01-13 07:31:04.358011255 +0000
     Modify: 2013-01-13 18:48:25.930011255 +0000
     Change: 2013-01-13 18:48:25.930011255 +0000
      Birth: -
  
   Find where / is mounted:
  
     $ mount | grep ' / '
     /dev/vda1 on / type btrfs (rw,subvol=@,compress=lzo)
  
   And the device ID for /dev/vda1 is not 18:
  
     $ ls -l /dev/vda1
     brw-rw---- 1 root disk 253, 1 Jan 13 08:29 /dev/vda1
  
   So use /proc/$$/mountinfo to find the device underlying the input
   path.
do not reload upstart configuration on upstart jobs

For now, we disable reloading upstart jobs due to bug 1124384.
At some point in the future, we could enable it again when that
bug is fixed.

The change here allows for a boothook in a multipart input to write the
file '/run/cloud-init-upstart-reload' and then have configuration
reloaded.
Support resizing btrfs filesystems.

The existing code has two issues with btrfs:

1) The command to resize a btrfs filesystem uses a path to the mount
   point, not the underlying device:

   $ btrfs filesystem resize max /dev/vda1
   ERROR: unable to resize '/dev/vda1' - Inappropriate ioctl for device
   Resize '/dev/vda1' of 'max'
   $ btrfs filesystem resize max /
   Resize '/' of 'max'

2) The code that is given a path and finds the ID of the device where
   the path is mounted doesn't work for btrfs:

   Use /proc/$$/mountinfo to find the device where path is mounted.
   This is done because with a btrfs filesystem using os.stat(path)
   does not return the ID of the device.

   Here, / has a device of 18 (decimal).

     $ stat /
       File: '/'
       Size: 234 Blocks: 0 IO Block: 4096 directory
     Device: 12h/18d Inode: 256 Links: 1
     Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
     Access: 2013-01-13 07:31:04.358011255 +0000
     Modify: 2013-01-13 18:48:25.930011255 +0000
     Change: 2013-01-13 18:48:25.930011255 +0000
      Birth: -

   Find where / is mounted:

     $ mount | grep ' / '
     /dev/vda1 on / type btrfs (rw,subvol=@,compress=lzo)

   And the device ID for /dev/vda1 is not 18:

     $ ls -l /dev/vda1
     brw-rw---- 1 root disk 253, 1 Jan 13 08:29 /dev/vda1

   So use /proc/$$/mountinfo to find the device underlying the input
   path.
skip unit test due to LP: #1124384
initial stab at growpart module
add some unit tests, fix an issue or two

 * drop the parsing of options into csv, as we were only exploding them
   back.  That can only result in error.  Just do minimal parsing.
 * change the parsing of key lines to:
   if entry is valid:
     * use it
   else try taking off options:
     if good, use it
     else fail
move function to a static list, comment where it came from
change parser.parse 'default_opts' to 'options'

Now, parser.parse specifies options that override any options found,
rather than just being default options.

There could still potentially be a user for default_options, but since we're
not using them anywhere, I've dropped it.  The difference is that in setting up
the root user, we're now insisting that all keys that go in there have the
key_prefix, even if the key content had other options.

I think this is actually the commit that fixes LP: #1136343.
fix regression on expected label of filesystem for DataSourceNone

Last addition to DataSourceNoCloud left it looking for a filesystem
named 'None'.
merge from trunk
remove debug code