Expand the DSL abilities with Project manipulations

This does the following:

* Split loading of configuration into two pieces: Discovery and Resolution
* Discovery is when we find all projects defined in a config file *and* load all Setting/Manipulation/Definitions
* Resolution is when we take *all* the .sbt + .scala files associated with a project, do the AutoPlugin resolution and finalize the `Project` instance
* Migrates the DSL of `.sbt` files to use `sbt.internals.DslEntry`.
* Adds `ProjectManipulation` as a DSL option instead of just `Seq[Setting[_]]`
* Applies project manipulation functions before finalizing projects
* Add `enablePlugin` and `disablePlugin` to the DSL.
* Update tests.

Note: @benburton informs me we should upgrade to using Fiber instead of a DSL.

Fixes #1213 and #1299


Also, I expect this one may take some time for review, but we should still be prompt.   Review by @eed3si9n cc> @cunei