Massive refactor of Ursula

This change is a massive refactor of Ursula. There are effectively no
logic changes, just a reworking of existing code.  Here are the changes
encompasssed:
- remove host group roles (ie. db, network, compute, controller). All
roles should be reflective of the resources they provide; not the host
group that they serve. Having host group roles leaves us with code that
is not composable when we decide to break services out into other groups.
(note: most of the other changes are due to this modification; hence the
massive size of this change)
- move all service installation (ie. /etc/init/nova-compute) to the role
providing the service.  This is no longer part of the "compute" or
"controller" roles.  This is facilitated by a new library:
upstart_service.
- break roles into control and data plane roles. By doing so we can
direct a playbook run at a particular plane. This is especially useful
for new node additions.
- have control and data plane roles become dependent on any common roles
(ie. nova-data and nova-control are both dependent on nova-common). This
helps keep our code DRY.
- Similarly, because services are installed and started earlier than
they had been, have each openstack role manage its own database
creation. This is now an additional dependent role.
- Add tags to each of the sections within site.yml. Again, this helps us
target specific planes, sections, services, etc.
- Move haproxy to its own common role that is flagged by a parameterized
role. We had duplicate code here and it made a lot of sense to squash
this.
- Fix up Vagrant for testing.

!version-major