Distro inheritance:  do what's expected

*** This is an experimental patch, not well tested and incomplete ***

Profile objects may have the 'distro' attribute set at any level in
the inheritance tree.

Other missing attributes are inherited from the closest ancestor where
the attribute is set.  However, 'distro' attribute was not, and the
distro was always selected from the base profile in the hierarchy.

This countered expectations when higher-level profile 'distro' attributes
were set but not honored.

Some of the changed code is hacking around Profile.get_parent(), which
returns the distro object if there's no self.parent.  I don't know the
code well enough to remove that behavior.

Changes:

The Profile object has a new 'get_inherited_distro()' method that
returns the distro object set in the nearest ancestor (starting with
itself).  ('get_distro()' is a helper function)

Then utils.grab_tree() builds the tree with the inherited distro at
the base instead of the base profile's distro.  When utils.blender()
runs __consolidate(), the attributes from the inherited distro are
picked.  (__consolidate() also no longer treats the Profile.distro
attribute specially, so it is inherited as other attributes and
matches the inherited distro object.)

A few places in kickgen.py where 'distro =
profile.get_conceptual_parent()' are replaced with
get_inherited_distro() instead.  There are many other such places that
need to be examined.
item.py:  a little cleaner way to compute self.conceptual_parent()
utils.py:  clean up code obsoleted by get_inherited_distro()
remote.py:  log an exception that was previously silent
item_distro.py, item_system.py:  add 'get_inherited_distro'

With item_profile.py, any tree object has the 'get_inherited_distro()'
method.
utils.py:  fix set_virt_type to <<inherit>>
remote.py:  fix a conceptual_parent->inherited_distro in get_system_for_koan
utils.py:  add default to choices in add_options_from_fields

Most notably, this adds '<<inherit>>' as a choice to many options with
a set list of choices
cli.py:  more meaningful messages on server exceptions

Make it clear that the exception originates server-side, and don't
trim the string, which may not be enclosed in quotes
cobbler.utils.grab_tree():  use distro from object, not parent

Ran into a case where the object had no parent.  This is the right
code anyway, since both system and distro objects have the
get_inherited_distro() method.
koan/app.py:  handle kickstart url '--proxy' argument
koan/app.py:  get install tree from self.server, not profile_date

When a profile overrides the 'server' parameter, that address may not
be addressable from the VM host; instead, use the same address used on
the koan command line.
koan:  enable passing rbd volumes
distro_signatures.json:  add fedora19 signature
Fix os validation for virt-manager

virt-install is now part of virt-manager, and the 'virtinst' module is
no longer public; also, the osdict.OS_TYPES structure is gone.

Detect newer virt-install version, and get versions with 'virt-install
--os-variant' instead.
koan:  fix problems with rbd source-protocol/format/driver confusion

qemu-img and virt-install have different requirements for disk args
specification.

The qemu-img '-f' option stands for 'format', except when creating RBD
volumes (or maybe any 'network' type disk, incl. iSCSI and sheepdog?),
it stands for 'protocol', an attribute in 'network'-type disk 'source'
elements.  In addition, qemu-img (qemu in general) wants the disk
identifier to be preceded by 'rbd:', which virt-manager and libvirt do
not.

Since the RBD volume is being created by qemu-img, virt-manager
considers it 'managed or other existing storage', and therefore wants
the disk identifier specified in '--disk vol=' rather than '--disk
path='.  It also complains about specifying 'format=' for existing
volumes (and if that were allowed, would be 'raw', not 'rbd').
koan: Add storage pool refresh function

When an RBD volume is created with qemu-img, libvirt is not
automatically notified, and trying to attach the volume causes an
exception.  The storage_pool_refresh() function scans uses virsh to
scan pools, and any pool that contains one of the created disks is
refreshed so that libvirt knows the volume exists.

Conflicts:

	koan/qcreate.py