Better TargetLexer.

I’ve now improved TargetLexer so that it supports UUIDs. It also moves
Boolean logic parsing to a more convenient place:

We now evaluate input like “0,1;0” instead of “010.” Note that this has
no effect on Boolean logic and actually makes it more accurate as the
method has been engineered so that AND clauses take precedence over OR
clauses. For example, “0,1;0” → “0,(1;0)” → “0,0” → “0.”

This method is more compact than the former implementation.

As for UUID matching: We have several methods for matching UUIDs. They
can be chosen command-time and include the following:

OLDEST: The first recorded account to have used the given username is
chosen.

LATEST: The latest recorded account to have used the given username is
chosen.

CONTEXTUAL: The most common account to have appeared in the latest
lookup (or teleport or inventory search) is chosen.

DIVERGENT: All accounts to have used this username are chosen.

These options give users a bit more flexibility when selecting
usernames.