Listen to new dependencies recursively

the dependencyAdded event is now emitted after the dependency's own
dependencies are populated, so we need to recurse to avoid skipping
those
Clean up ui logging