inventory directory parser: add hosts to group non-recursively
inventory directory parser: add groups to parent_groups non-recursively
inventory directory parser: add host to group only once
inventory group: add groups to parent_groups only once
inventory groups: make sure group.depth is updated on all grandchildren
inventory ini parser: do not add all the groups to *all* group

but only those with lowest depth, so we keep a proper tree structure
inventory script parser: do not add all the groups to *all* group
Inventory: raise error when adding a group that already exists.

The parsers check if a group already exists.
InventoryDir: refactor logic

Make sure all hosts and groups are unique objects
and that those are referenced uniquely everywhere.
Also fixes test_dir_inventory unit tests which were broken after previous
patches.

	modified:   lib/ansible/inventory/dir.py
Refactor vars_plugins (host/group_vars)

Split out parsing of vars files to per host and per group
parsing, instead of reparsing all groups for each host. This enhances
performance.

Extend vars_plugins' API with two new methods:
* get host variables: only parses host_vars
* get group variables: only parses group_vars for specific group
The initial run method is still used for backward compatibility.

Parse all vars_plugins at inventory initialisation, instead of
per host when touched first by runner. Here we can also loop through
all groups once easily, then parse them.
This also centralizes all parsing in the inventory constructor.

	modified:   bin/ansible
	modified:   bin/ansible-playbook
	modified:   lib/ansible/inventory/__init__.py
	modified:   lib/ansible/inventory/vars_plugins/group_vars.py
Introduce noop vars plugin.

In preparation to move the group_vars plugin code into core.

	new file:   lib/ansible/inventory/vars_plugins/noop.py
Move inventory.set_playbook_basedir from ansible-playbook to playbook constructor
Move group/host_vars parsing into core inventory

	modified:   lib/ansible/inventory/__init__.py
	deleted:    lib/ansible/inventory/vars_plugins/group_vars.py
	modified:   lib/ansible/utils/__init__.py
performance optimisation in hash merge logic

rewrite deepcopy in util.merge_hash and just iterate
on an inventory with 500 groups and 800 hosts this brings back the
inventory initialisation from 13s to 3s (with hash_behaviour=merge)
InventoryDir: another fix for the host.groups list

In some cases, where a host is mentioned in multiple groups, and those
groups are referenced in multiple ini files, a group could still contain
multiple instances of a group in its host,groups list, where only one of them
is the right group, that exists in the inventory.
Adding unit tests for host groups with inventory dir
Fixing expectations in test_dir_inventory_groups_for_host
Merge pull request #2 from taylorbarstow/inventorytree-tests

Adding unit tests for host groups with inventory dir
Add run_once task key

This caused the task to act like  bypass host loop plugin and
execute only on a single host. Can be used with delegate_to
Allow public_key to be a path to a file