Restored lazy evaluation of external solver presence
Better orphans computation

Previous version was too expensive (calling the solver), and too strict
(duplicated checks done at other places).

This should be faster and easier to understand.
Real read/write locks using Unix.lockf

Ref: #1212 (I still got a Pervasives.exit 64 from Dose: algo/depsolver.ml: the package encoding global constraints can't be in conflict when trying to _display_ the conflicts with internal solver)
Ref: #457 (should be safe to take a read lock until solution application, then a write lock. If this is still needed ; breaks current `make tests`)
Closes #434 completely, as there should not ever be a need to reset locks anymore.
cleanup OpamClient.update: don't pass string as OpamRepositoryName.t

wait until we can decide to convert the argument to repo or package name
More robust handling of pinning commands

Handles re-installation and re-pinning with metadata changes
Interactive handling of pinned package metadata updates
Improved stats display
Merge pull request #1298 from OCamlPro/fix-orphans-again

Fix performance and simplify orphans computation
Merge pull request #1300 from OCamlPro/cleanup-overlays

Sanitize pinned package handling
Fixed '??' versions appearing in conflicts messages
Enable backtraces in travis
Merge pull request #1301 from OCamlPro/version-map-avail-pkgs-only

Fixed '??' versions appearing in conflicts messages
Temporarily disabling read locks

* in `make tests`, the `switch-alias` test calls `opam config` from a package script.
This obviously breaks with a real read lock.
* Test should probably fixed, but mirari may use similar patterns.
Merge pull request #1299 from OCamlPro/unix-lockf

Real read/write locks using Unix.lockf
Fix: make sure backup_dir exists
Metadata update for all dev packages

not only the pinned ones
Display causes for reinstall commands too

The solver wasn't called at all for this simpler case, so the cause computation
step was bypassed.
Fixed opam printer for "%{ident}%"

the simplification doesn't work in all cases
Merge pull request #1305 from OCamlPro/dev-opam-fixes

Closes #1304 (both issues)
Use the POSIX compliant command -v invocation to determine whether a command exists,
and check execution permissions if it is an external command.