Release curl connections at exit

Avoids warnings during unit tests.
Allow <executable-in-*> bindings in optional dependencies

Note: this didn't work in the Python version either. Optional
dependencies with commands were treated as essential.
Moved some mirror support code into its own module
Moved key info fetching into its own module
Install GTK plugin even if both native and bytecode versions were built
Re-added support for ZEROINSTALL_EXTERNAL_FETCHER

This is needed on Windows because X bits need some special support that
is implemented in .NET.

Requested by Bastian Eicher.
Added .merlin file for better editor integration

Also, switched from annot to the newer bin_annot, which speeds up the build.
Set default size for app list and cache explorer boxes

The open too small on Ubuntu 14.04.
Merge branch 'b2.6'
Treat empty locale variables as unset

Avoids warning:

warning: Failed to parse locale ''
Improved error reporting from JSON slave

Changed:

  warning: Unhandled error from Lwt thread: Invalid integer 'XXX' (int_of_string)
  Fatal error: exception Invalid integer 'XXX' (int_of_string)

To just:

  Invalid integer 'XXX' (int_of_string)
Fixed support for HTTP redirects on Windows

Also, since we didn't close the file handle in this case, and Windows
doesn't let you unlink open files, 0install actually reported a failure
to delete the temporary file instead of the real error. Fixed.

With --verbose, the error was:

info: Download failed: Invalid_argument("Unix.ftruncate not implemented")
Unix.Unix_error(Unix.EACCES, "unlink", "C:\\Users\\...\\0install-289dec-download")
Updated Windows ocurl instructions for ocurl-0.7.0
Treat $ZEROINSTALL_EXTERNAL_FETCHER as a shell command

Before, we assumed it was the path to a binary, but the .NET code needs
to pass an argument.

Error was:

Not found in $PATH: "C:\Program Files\Zero Install\0install.exe" fetch
... handling $ZEROINSTALL_EXTERNAL_FETCHER
Fixed build-time ocamlfind queries to work on Windows

Windows didn't like the \n character in the command.
Fixed set_mtime on Windows for directories

The utime function doesn't work correctly with directories.
Need to use SetFileTime instead.
Made more unit-tests work on Windows
"0install remove-feed" didn't work if the feed had been deleted

Reported by Tim Cuthbertson.
Moved Distro_impls.Cache into its own file

Also, tidied up the interface:

- Format and revision options are gone. If the format changes, just use
  a new file. Bumped the file version for all caches so we can use a
  single consistent format for all of them. Entries always now use tabs
  (so we don't have to worry about names containing = characters).

- All internal methods are hidden.

- regenerate_cache now asks callers to submit entries, rather than
  just handing over the raw output cannel.
Use apt-cache to pre-filter PackageKit queries

If some of the packages passed to PackageKit don't exist, it may fail to
report on some of the other packages you asked about too. So make sure
they all exist first.

Also, apt-cache support was broken anyway because apt-cache no longer
accepts the --no-all-versions option after the subcommand name.

When running in debug mode, don't redirect apt-cache's stderr to
/dev/null.