Breaking: Implement configuration hierarchy (fixes #963) (Unfinished)

Just want to get some eyes on this to see if I've missed anything. Some things to note:

1. I've not yet tackled the `package.json` piece of this.
2. Discovered that most of the CLI tests are really hard to figure out exactly what they're testing. As such, I'm never quite sure when something breaks if it means anything.
3. Some tests are breaking - not sure what that means given 2.
4. I ended up writing tests for the `CLIEngine` that really should be for `Config`. I'll spend some time translating that over.
5. Many tests are being infected by the `.eslintrc` file in the root directory. For the new tests, I copy over into a temp directory to avoid that effect.
6. I think the implementation is mostly correct - I just need to redo the tests to have a higher degree of confidence in that.