generator: Sort the structs.

Sort the structs when generating code.  Since the structs are
logically indepedent of each other, this should have no effect except
to make generated files list the structs in a different order.

However this also fixes the following build problem:

  File "convert_linux.ml", line 322, characters 43-50:
  Error: This expression has type G.stat = Guestfs.stat
    but an expression was expected of type G.dirent = Guestfs.dirent

It turns out the OCaml bindings don't like the fact that we have
two structs with a common field name (dirent.ino and stat.ino).

In OCaml < 4.01, this means that any attempt to reference stat.ino
would fail because dirent.ino appears second in the file, overriding
stat.ino.

Sorting the structs has the side effect of making stat.ino appear
second, thus resolving the build failure above.

In OCaml >= 4.01 the compiler now uses some disambiguation rules based
on the known types to resolve this problem, so accessing either field
would work no matter what order they are listed in.

See:

http://ocaml.org/releases/4.01.0.html
http://www.lexifi.com/blog/type-based-selection-label-and-constructors
http://www.lexifi.com/blog/ocaml-extensions-lexifi-overidding-record-labels-and-constructors
v2v: Change source disk into a struct.

Simple code refactoring, allowing us to collect the target/@dev
attribute in this (now) structure.
v2v: When inspecting Linux guests, collect kernel version & location of initrd file too.
v2v: When converting Linux guests, rebuild the initrd.

It probably needs to be rebuilt to add virtio drivers.
v2v: Kill kudzu dead.
v2v: Remap block device names in grub & /etc/fstab.

eg. Change /dev/hda to /dev/vda
v2v: Change fstrim message to warning.

This also ensures it is flushed and translated.