Rename fields in Project and load the root package only once.
Implement a new dependency resolution algorithm with support for selections.

The new algorithm is completely rewritten to be able to find any valid combination of dependencies/versions. The old one could error out in cases where a valid dependency tree could have been built. Now the current selections are also taken into account when invoking without UpdateOptions.upgrade.

Some side changes:
 - Comparing branch versions is allowed now to enable sorting the full set of versions of a package
 - DependencyGraph and RequestedDependency have been removed