Prevent rebuild code from performing unwanted repo changes
ebuild-helpers/xattr/install: use the binary wrapper if available; fall back to the python one

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
xattr/install helper: put /usr/bin at front of path to avoid invocation-bomb

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
digraph.child_nodes: handle bad key lookups without raising IndexErrors (pypy)

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>
depgraph: don't rely on exception swallowing

depgraph._solve_non_slot_operator_slot_conflicts relies
on an obscure exception-swallowing code-path here:

-> self._solve_non_slot_operator_slot_conflicts()
  /usr/lib64/portage/pym/_emerge/depgraph.py(1163)_solve_non_slot_operator_slot_conflicts()
-> self._remove_pkg(pkg)
  /usr/lib64/portage/pym/_emerge/depgraph.py(2404)_remove_pkg()
-> self._dynamic_config._package_tracker.discard_pkg(pkg)
  /usr/lib64/portage/pym/_emerge/resolver/package_tracker.py(150)discard_pkg()
-> self.remove_pkg(pkg)
> /usr/lib64/portage/pym/_emerge/resolver/package_tracker.py(119)remove_pkg()
-> cp_key = pkg.root, pkg.cp

pkg can be a tuple, here which generates an attribute error bubbling
up from package_tracker.remove_pkg.  pypy will not swallow this so
prevent that from happening by only calling _remove_pkg for legitimate
packages.

Signed-off-by: Gregory M. Turner <gmt@be-evil.net>