Use six to make dict work in Python 2 and Python 3

Dict's interface changed a lot between Python 2 and Python 3.
Use six to make dict work in them.
This is mapping:

six            Python 2        Python 3
six.iterkeys   dict.iterkeys   dict.keys
six.itervalues dict.itervalues dict.values
six.iteritems  dict.iteritems  dict.items

Part of blueprint keystone-py3kcompat

Change-Id: If41b19353f07853e39064f848ba74e9cdfd9bd14
Unify StringIO usage with six.StringIO

Python 3 doesn't include StringIO.StringIO, but includes io.StringIO.
To unify StringIO usage, use six.StringIO instead.

See http://pythonhosted.org/six/#six.StringIO

Part of blueprint keystone-py3kcompat

Change-Id: Ieb03821ef6be2195ea2d58445de507dadee7e3d2
use assertEqual instead of assertIs for string comparison

Change-Id: I83fd4c28007e5242b69d2473d4a91f6801c49601
Allow event callback registration for arbitrary resource types

In some cases events should still be able to be registered for
resource types that have not been explicitly defined due to an
extension not being loaded or active. The if-check to raise
a ValueError if the ResourceType has not been explicitly
defined by a @dependancy.provides line has been removed.

Change-Id: I9fb368c5734a4a560a4bdd97d4467e2f76ca0e5c
Merge "use assertEqual instead of assertIs for string comparison"
Implement filter support in driver backends

Currently filtering is only done at the controller level, leading to
performance issues since we are not using native filtering capabilities
of any of the underlying backends (e.g. SQL, LDAP). This patch enables
such support.

This support is provided via a generic 'driver hints' approach, allowing
other types of hints to be added in the future.

Limitations:

- The LDAP backend does not yet support for filtering, leaving it for
  the controller level.  LDAP support will be added in a separate patch
- Filtering for service, endpoint and policy is left at the controller
  level, since these operations are not considered performance issues.
- Due to MySQL defaults, case sensitive filters are not yet well tested

Implements bp filtering-backend-support

Change-Id: If5229d89a39dca952dee3b1c4cbf3b34b8afa95b
Merge "Use six to make dict work in Python 2 and Python 3"
renamed extensions development doc

renamed file to follow the naming convention employed by other docs
(which produces a lowercase URL on http://keystone.openstack.org/ using
underscores as a word separator)

Change-Id: I450aa89286d69e1c7485b9ede7c0a9ab78926640
Merge "Implement filter support in driver backends"
Merge "renamed extensions development doc"
Merge "Allow event callback registration for arbitrary resource types"
Merge "Unify StringIO usage with six.StringIO"