serve: correct meta variable of --daemon-pipefds option

It was changed to lock path at e22695b4472f.
extdiff: quote user-supplied options passed to shell

$ hg extdiff -p cmd -o "name <user@example.com>"
resulted in a shell redirection error (due to the less-than sign),
rather than passing the single option to cmd. This was due to options
not being quoted for passing to the shell, via util.system(). Apply
util.shellquote() to each of the user-specified options (-o) to the
comparison program before they are concatenated and passed to
util.system(). The requested external diff command (-p) and the
files/directories being compared are already quoted correctly.

The discussion at the time of changeset be98c5ce4022 correctly noted
that this course of action breaks whitespace-separated options specified
for external diff commands in the configuration. The lower part of the
patch corrects this by lexing options read from the configuration file
into separate options rather than reading them all into the first
option.

Update test to cover these conditions.

Related changesets (reverse-chronological):
- be98c5ce4022 (fix reverted to make configuration file options work)
- 453097750fbf (issue fixed but without fix for configuration file)
color: document the possibility to colourise tabs in diffs

This is a no-op change that simply suggests that tabs can be
colourised, but defaults to no colour effects for tabs. This
complements cset c343557a8442.

Like the similar effects for phases from f8e2aebbb24c, we set the
default effects to '' instead of None, so that this is a true noop
change. Otherwise, the diff.tab effect would override (i.e.
neutralise) the effect of the surrounding label.
color: update docstring for debug option

964dd1c491ca updated the format for the --color=debug option. This
updates the documentation to match this new format.
revert: bring back usage of `subset & ps` in `parents`

Changeset 95af98616aa7 switched the order of the operand of the "&" computation
to work around an issue from repo-wide spanset. The need for a workaround has been
alleviated by the introduction of `fullreposet`. So we restore it to normal.

The benchmark shows no significant changes as expected.

We also revert the bogus test change introduced by 95af98616aa7. The order is
actually important.
abstractsmartset: default implementation for `ascending` and `descending`

These two methods are actually silly aliases for `sort()` and
`sort(reverse=True)`. So we get that aliasing at the abstractsmartset level. We
will slowly phase out all the custom implementations and eventually remove any
mentions of it from the code.
baseset: remove ascending/descending redefinition

We can rely on the abstractsmartset implementation.
spanset: remove ascending/descending implementation

We can rely on their implementation in abstractsmartset.
abstractsmartset: document the `fastasc` and `fastdesc` attributes/methods

See the in-line documentation for details. (This is the beginning of a massive
overhaul of revset).
spanset: enforce the order lazily to gain `fastasc` and `fastdesc` methods

Instead of having the direction of iteration enforced through the ordering of
`start` and `end` attributes of spanset, we encode the iteration direction in
an explicit attribute and always store start < end.  The logic for sort and
reverse has to be updated. The __iter__ is now based on the newly introduced
`fastasc` and `fastdesc` methods.

This will allow other code simplifications in the future.
spanset: do a single range check in __contains__

Now that `start <= end` is always true, we can simplify this function.
lazyset: split the iteration logic from the condition filtering logic

So that the filter can be reused by `fastasc` or `fastdesc`.
lazyset: inherit the fastasc and fastdesc method from subset

When the filtered subset has such methods, we can use them. It is implemented
as properties to be able to quickly return None if no corresponding fastasc exists
on the subset.
lazyset: drop now useless ascending/descending definition
abstractsmartset: add a default implementation for min and max

This default implementation takes advantage of the fast iterator if available.
baseset: remove min/max methods

This is now handled by the base class.
lazyset: remove min/max

This is now handled by abstractsmartset.
lazyset: add order awareness to the class

Just a bit of extra code makes the lazyset aware of order. This renders
orderedlazyset useless.

At some point, the `subset` will become responsible for this ordering logic. But
we are not there yet because the various objects used as subsets are not good enough.
lazyset: rename the class to filteredset

All smartsets try to be lazy. The purpose of this class is to apply a
filter on another set. So we rename the class (and all its occurences) to
`filteredset`.
abstractsmartset: add default implementation for filter