Config module to allow project-wide configuration

Furious is designed to work with different task
and key-value persistence systems. Examples of
former are appengine taskqueue and 0mq. Examples
of later are appengine's ndb api to the datastore
or Redis. The project using furious must be able
to configure these options in a location accessible
to all parts of furious including operations in
it's own webapps that handle the tasks and admin
functionality. This module will load a project's
furious.yaml file while providing defaults.
It keeps a dictionary of known configuration options
for convenience and a function to load the configured
module for persistence.
Add tests for config and Add exceptions to config

Add exceptions to config and raise them when
invalid or empty furious.yaml file is found. Change
config loader to enable it to work with a mock file.
Change module_import to raise an exception when
it is not found.
Tests cover importing of
	- existing and non-existing modules;
	- finding a yaml file that exist and does not exist
	- loading a valid yaml file
	- loading an invalid yaml file
	- loading the configured persistence module
        - loading a persistence module by invalid name
Conforming to PEP-8
Fix typo
Add a way to assign an id to an Async
Correct Async.from_dict to not mutate source options dict.

Async.from_dict mutated the options passed in as the argument.  Such
unexpected mutations are not friendly and may be dangerous.
Transplant encode / decode callback logic to job_utils.

The callback encoding logic is required by other objects as well, such
as Context.  Because of this, they should be split into a more "neutral"
location than async.py.
Add init files for extras.appengine

Need location to add a persistence module for app engine
Add module to contain ndb persistence code
Add module to contain Context Job completion
Add imports for function serializing
Merge branch 'configuration' into patched_master
Add config import to completion_marker + test module
Add gitignore directives to keep out PyCharm metadata
Add persistence id handling functions

A context and each Async that is part of it needs unique ID
and since a graph will be used to join all of them, the internal
nodes/vertexes of the graph also need an ID too. The ID of every
Async will be prefixed with it's parent node ID, to allow it to find
the parent. leaf_persistence_id_from_group_id combines the parent
ID with a new id for it's child. leaf_persistence_id_to_group_id returns
the parent ID from a child node.
Add function needed to analyze the graph
Fix a problem from a merged cherry-pick
Change the name of the 'ndb' persistence module
Corrected config and marker tests

I was using patch improperly to just import modules
so changed them for regular imports.
I remove the config test that only passes if a user's
furious.xml is present, which wouldn't exist in furious itself
Add id property to Async

In order to persist an Async it needs an id. The
persistence layer will add an id if none is given.