Don't use operation-original-initargs in operation-forced.
operation-original-initargs is deprecated, and so is operation-forced.
The only, misguided, user of operation-forced is swank.asd,
which conditionally loads the code only if the operation is forced;
but the perform method that does the check will only be called twice
if the operation is forced, anyway, so the correct answer is T.
(And the first time around, it's OK to return T, too.)

The order in which the upgrade fixups were called wasn't very robust.
We need to first get a list of systems being defined, then
clear defined systems (but not asdf, and *neither uiop* that asdf depends on),
then upgrade the configuration, and *finally* reload any of the systems being
defined (including their defsystem-depends-on dependencies!),
which means this all has to be coordinated within the same function.

CCL, our previous default, was making `make -f Makefile-lisp-scripting load`
unhappy, since CCL's background thread is eating rlwrap's input. Using
single-threaded-ccl stops the input race condition, but CCL still puts the
tty in raw mode which confused rlwrap and this requires adding a dependency.
Still use CCL by default on Windows, since SBCL can't invoke CMD directly.

Declare a FTYPE for ENSURE-PATHNAME in uiop/pathname so that CCL won't complain
about a forward reference during `make load l=ccl`.
SBCL insists that a type (FUNCTION (T &REST T) T) doesn't cover a function
with keyword arguments, and wants either an exhaustive list of keywords and types,
or a &ALLOW-OTHER-KEYS. So just say FUNCTION, to make SBCL happy, too.

Selection: REQUIRE, 3.1.7, 3.1.5, 3.0.3, 2.26.
Older doesn't make sense since we now always "punt" on 2.26 and earlier.
More versions since then makes limited sense because the code base
has been much more stable with respect to upgrade since then.
You can always test upgrade from more versions with e.g.
./make-asdf.sh l=sbcl u=all u

When testing upgrade from old versions of ASDF, we must accommodate the need
that some old versions have for us to wrap the calls in c-w-a-c, and the need
for yet older versions for us not to call c-w-a-c, that didn't exist back then.

p-u-r-h was never called! Two functions were registered.
Register them with *post-upgrade-cleanup-hook* instead.
The hook was introduced with pre-release 2.27,
possibly with the intent to be called by the main operate :around method
when an asdf build is restarted in the middle. But that never happened.

The code for %POSIX-SEND-SIGNAL -- which isn't invoked on Windows
anyway, was crashing on Windows build -- because of differences in
function signatures on CCL Windows/other. Fixed this by simply making
%POSIX-SEND-SIGNAL a stub on Windows. I couldn't remove it altogether,
because deciding whether to invoke it is a decision made at run-time,
not compile-time.

- Move parameter error handling for CLISP:
Catches cases where :error-output is set to :output before it is
normalized: normalization would fail because there is no
corresponding case in the ectypecase clause.
- Check for combinations that would eventually lead to errors

The :osi module e.g. currently appears to pull in :regexp2 and thus
:yacc as dependencies. Consequently, any code that uses the :osi
module (e.g. by calling excl.osi:kill) will have the :osi module
loaded.
The :sax module, in contrast, is far less likely to be pulled in by
accident, making test-require more robust on allegro.

Doc update
I'm slowly proofreading the code of ASDF and adding more comments and docstrings. That will take a few weeks to complete. Here is what I have so far. You may merge at any point. This branch ought to not modify any code as such, only comments, docstrings, manual sections, and other non-code-generating parts of the repository.
See merge request !24