Factor lookup() into two versions: one recurses through module Uses and the other does not.

Pulling apart the two versions allowed significant simplification of the version that does
not recurse through uses.  Further code consolidation is possible, by making the helper
routines return (or merely populate) a vector of symbols and pushing the error-reporting
logic into the driver routine.
Simplify lookup helper by pushing symbol selection into the top-level lookup() routine.

This factors the common decision and error-reporting logic out of the duplicate routines.
Simply gathering up a vector of symbols also simplifies the overall logic.
Error reporting now lists all duplicate symbols before aborting. (TODO: we may need to
provide file/line or other context.)