Support a new YAML format for template settings

This is the initial version of support for a YAML format settings file, to supersede ```cookiecutter.json```. Before committing, I would like to refactor this further, to make the "internal" format completely encapsulated in ```settings.py``` so that client code need have no knowledge of how the settings are stored. But the PR is sufficiently complete that it's ready for initial review.

At the moment, it's only the context data that is in the settings, so the refactoring won't actually impact much, but it establishes the principle that following changes should follow. The main change at this stage will be in the tests, which currently know far too much about how the settings/context is stored.
But the whole point is that I want to isolate the management of the context from the reading of the file. ```generate_context``` only returns the context, so how would I retain all of the rest of the data from the settings file? Under the new format, the settings file will contain a lot more than just the context, and should not be managed by the context related functions.

I want one set of functions that reads the settings, and provides an API for client code to read the bits they need. Nothing outside of the settings module should be reading the file, or worrying about which bits of the settings object are the context, or anything like that.

```generate_context``` is a bad function in the new model, because it does both reading of the settings file and managing of the context (merging the user config and ```extra_context``` data etc).

I may not have fully understood all of the implications of how the context works (as I said in the discussion about the cookiecutter API, there's a lot of complexity in here that's not used by the command line interface, and I don't know what use cases are as they aren't documented anywhere. Maybe we'll need some sort of compromise solution, but I don't know what until I know what can be refactored, and what is a user-visible API.