Rationalize the code for updating repositories (#622)

Right, every backend should now have to implement only 3 actions, with a much simpler semantics.

We already had:
- pull-repo: Update a repository with this backend type
- pull-archive: Download an archive file for this backend type (always return a filename)

and now we have:
- pull-url: Download the contents of an url, return either a filename or a dirname, depending of the backend type.

And 'pull-url' is used:
- when reading url's file contents to download a package
- when a package is pinned to a given path

The current backend's behaviors:
- HTTP backends can only 'pull-url' files
- GIT/darcs/HG can only 'pull-url' directories
- LOCAL (rsync) backends can either pull files or directories (that's easy to test with [Sys.is_directory]).