Returns aliases for the given dependency graph. The aliases do not need to be transitively
resolved, i.e. it is valid to return an alias (X to Y) and an alias (Y to Z). It is the
responsibility of the caller to resolve this to (X to Z) and (Y to Z).
bindings - bindings that make up the dependency graph