Fix the solver behavior in case of choices with conflict.

Moreover, when we a package is an implicit dependency, we try to keep as much as possible the version already installed.

This is done is 4 steps:

1. we explore the state space only for the package explitely given on the command-line
2. we iterate on the installed packages which are in the dependency cone, to check if they are still installable
3. we order the remaining packages in the dependency cone by version number (to favor newest packages instead of deprecate ones) and we incrementally explore their state space to check (i) if the package is really necessary and (ii) find the best version available
4. we incrementally iterate the already installed packages (not in the dependency cone) to check whether they need an upgrade (or a downgrade)

This is to work well on my limited testing (eg. after playing a bit with old versions of core, cow and oasis2opam)

Fix #480