Clean-up OpamCompiler API
Clean-up OpamPackage API
Propagate OpamPackage and OpamCompiler API changes
Expose OpamFilename.files which does not scan recursively the given directory
Expose checksums functions in OpamFilename
Expose OpamJson hook to check whether we want to output JSON.
Do a quick test *before* building the JSON object to check it is really needed
Map.map{,i} should be tail-recursive
Expose an API for parallel computation on lists
Refactor OpamPath API and fix its documentation
OpamRepository.pull_url now takes a full package as debug argument (instead of just a name)
Clean-up and simplify the OpamRepository API

Use the new API from OpamPackage, OpamCompiler and OpamParallel modules, and propagate the changes.
OpamState API refactoring

Now use is_xxx_installed to know if a compiler/switch/package//name is installed.
Add an optional root argument to OpamFilename.copy_in

This make it easier to recopy subdirectories.
Refactor the 'a update type
Remove dead-code in OpamHTTP
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