Implement #define and #subst (to some extent)

Phew, this is *very* likely the biggest commit humankind will ever make!

So... #define and #subst are mostly ready to be used (with caution). They
are still seriously buggy in three main regards:

 - function-like defines only accept identifiers as arguments;
 - the "in-quote" detection is broken for masked quotes;
 - circular substitution leads to infinite loops.

I have some other issues noted locally...

One important design decision was made: we don't re-use the #subst gears for
difficult to get right.

I fixed various (quite a number) bugs reported by valgrind. Now, the upp
runs through the sample.P valgrind-cleanly. The number of small fixes,
especially when done over long time, is too big to remember them all (and
please don't chase be through the diffs are I'm kind of under time pressure
(of going to bed)) but I can name exactly one I wrote down early in this
commit time frame:

 - Update l->len when removing trailing spaces.

IIRC, this was not reported by valgrind and was quite subtle (in the sense
that you won't notice it without actually debugging your structures).

Well, apart from the fixed already promised, #ifdef, #ifndef, #else, #endif
will follow shortly as they are really not complicated to implement now.
Then #undef and then #if which is a beast because we need an evaluator for
expressions with quite some operators (all the C ones). But this shouldn't
be a big problem using Shunting-yard. But I'm away for a week now.

An onomatological note at the end: I felt to rename P to S because P is just
a meaningless letter (historically intended to signify the "pseudo" language
which P isn't anymore) and S stands for "slave language" which but only
captures one aspect of what the language is: a restricted language for slave
computers in an untrusted network _and_ a language which emphasises an
extensional view on functions - but try to make a name out of the second
thing ;-) ... or as general-purpose pragmatics may put it: it is just a
poorly-written subset of C with built-in caching :-)

There was another alternative: U for unicomplex language which captures both
meanings (not very elegantly, though) and lays stress on the fact that the
language is rather domain-specific. BUT "U" is part of the program names,
the headers, prefixes (will be) and so on. Having a single additional "u"
would kill me and would reduce naming to absurdity. OTOH, "Ulang" seems to
mean "lobster" in some Philippine language which is quite nice!

As I couldn't come up with a solution to this dilemma, I decided to continue
to use the name P (which makes it the Phoenix arising from the ashes of this
brain-damaged over-importantified (my dictionary must be missing a page as
I'm sure this word exists) naming discussion).

We may take the lobster as a logo for P anyways :-D (or the phoenix)