Use slab and trie in preprocessor

I actually told BS about the usefulness of the trie in the preprocessor. The
pp_{define,subst} are *not* searched by text but enumerated all the time, so
the trie is really useless here. Well, not so with the future lexer and
parser... (I think :-))

Apart from that, there is little but existent use for a trie with pp_define
because we also fix an issue here: formerly, macros of the same name could
be defined simultaneously and just be pushed onto the linked list (so that
the last one defined gets precedence - if #undef would work in the opposing
direction, that would actually be a cool feature...). Not so anymore. The
trie helps to retrieve presence information about macros. If you think that
is overkill, let me tell you that we'll need that for #if{,n}def and #undef.

The usage of the slabs strictly assumes a single-threaded environment. Yeah,
and look at there amazing(ly weak) improvements from using the slab cache in
the preprocessor (in samples/preproc.P):

before: total heap usage: 393 allocs, 393 frees, 34,111 bytes allocated
after:  total heap usage: 379 allocs, 379 frees, 35,597 bytes allocated

A few excess bytes allocated are to be expected from the block allocation
done in the slab code. The majority of (re)allocs are ->line members in
struct line, so not much to see in the number of allocations.
Outsource tests to a test/ directory

The lib/ directory is now cleaned from tests. Those live and run in the
test/ directory in the source tree root now.