Fix race condition when merging conflicting binary packages.
Fix race condition when merging conflicting binary packages.

In chromium-os:19328, satorux moved service_constants.h from
libchromeos to system_api. The tegra2_aebl binary builder installed the
new versions of libchromeos and system_api in parallel, triggering a
bug in parallel_emerge where system_api installed the new file first,
and then libchromeos removed the file. This occurred because the two
packages merged in parallel when they should not.

To fix the problem, I've updated parallel_emerge to always represent
blockers in the dependency graph, and to never merge two packages that
block each other in parallel.

BUG=chromium-os:19328
TEST=Below.
  1. Test simple blocker case where we depend on uninstall of
     another package.
  2. Test case where we depend on upgrade of another package.
  3. Test cyclic case where we depend on upgrade of another package,
     but the other package also depends on us.
  4. Run preflight test run and chroot builder test run.

Change-Id: Ic3e94ce208b5ed380052b15949d48b9b6ee7a100
Reviewed-on: http://gerrit.chromium.org/gerrit/6711
Reviewed-by: Nick Sanders <f4566bb3c90c0bf5fa0906b296b1da45051a62ee@chromium.org>
Tested-by: David James <f231dc574bbeb62604660cbc162d1b8642a0a3af@chromium.org>

zhang0137/chromite,chadversary/chromiumos.chromite,coreos/chromite,bpsinc-native/src_third_party_chromite,chadversary/chromiumos.chromite,coreos/chromite,coreos/chromite,zhang0137/chromite,zhang0137/chromite,bpsinc-native/src_third_party_chromite,bpsinc-native/src_third_party_chromite