Harder Better Safer 'opam update'

In OPAM 1.0, we were relying on each repository backend to tell us what the upgrade were. This was making the implementation of a new backend a little bit a pain (not it is really trivial) and was not very robust to occasional errors.

In the previous `master` version of OPAM, we were starting to compare the 'global' state (eg. what were in ~/.opam/opam, ~/.opam/desc ~/.opam/archives) with the 'repository' state (eg. what were in ~/.opam/repo/<repo>/packages/XXX/<package>). But we didn't have all the information we needed in the global state (for instance, we didn't know about urls, and additional files), the name of the files were changing, and so on.

So now, after a summer cleaning, and because now all the states ars stored globally, it is much easier and to compute the difference between the repository state and the global state, and to fix these properly and to tell the user. This is *much* more robust and simple than before.

Also, less caching (although we might add one back later if needed) so more deterministic results and simpler code.
Add a global hook to tell OPAM ignore the files eventually added by the packages

The hook is enabled if OPAMDONOTCOPYFILES is set to a non-empty value.

The hook is not used yet.
Dev packages should live in the global state

Currently the temporary files for dev packages are stored in the repository states (~/.opam/repo/<repo>/tmp/<package>/), and this has caused much trouble (and make the code painfully complex). The the natural place for these file is the global state, under ~/.opam/packages.dev/<package>.

Now, all the metadata and data associated to a packages is stored in the global state; the only time we need to compute in which repo a package belongs to is when we want to download any associated `name.version+opam.tar.gz` archive: in this case we need to triger the right OpamRepository.pull_archive function.
Fix scripts -- it's not a little bit more complex to create an archive files in a repository, but well, the API is there
Improve the messages on 'opam update'
Improve the messages on 'opam upgrade'
When creating a tempory file, check if the file already exist.

This can be a bit racy in case of concurrent creation of temporary files, but well ...
Expose OpamRepositoryCommand.fix_descriptions
Remove OpamPath.root (which was the identity function)
If system.comp is missing, try to reinstall it.
~/.opam/<switch>/config/conf-ocaml.config becomes ~/.opam/<switch>/config/global-config.config

This was not the OCaml configuration at all, so it's was misleading
We don't need to worry about fixing the symbolic links, as we have a new file overlay and we will have soon a new upgrade path
Upgrade path from OPAM 1.0 to OPAM 1.1
Display the full set/map when --debug is enabled
Move guess_repository_kind at the right place
Split OpamMain into two pieces

OpamArg holds the command-line flags, and OpamMain just call the final function. This is useful to easily create alternative binaries using the same command line arguments as OPAM.
Remove spammy debug messages