New std.uni meets std.regex

I've been preparing this for over half a year now.
Puts our std.regex on the new rails of recently revamped std.uni that now has enough of mojo to power a Unicode-aware regular expression engine. All of it with a minor exception via normal "user-land" public API.

1. 8KLOCs of red speak for themselves. This is a massive code reuse going on.
2. Must yield a faster regex (something to rigorously test, I expect around ~10-20% overall)
3. May fix some Unicode set operation bugs.
UPDATE: indeed fixes issue 11784.
4. Saves ~290Kb of object code on 32bits, ~350Kb on 64bits.


TODOs:
<del>
1. Regressed ctRegex - it outs of memory on some patterns that previously were passing just fine. In particular blocks 2 & 3 of CT-tests on win32.
</del>

Memory usage is something out of my control. I improved it a bit simplifying std.uni abstractions.  Tests are now split in 7 groups instead of 4 but cover more cases.
UPDATE: Only 5, with recent CTFE fix.

<del>
2. May have regressed regex compilation speed due to less straight-forward construction.
</del>
Seems just fine and even a bit better.

```d
import std.regex, std.stdio, std.datetime, std.string;
void main()
{
    StopWatch sw;
    sw.start();
    size_t cnt;
    char[] buf = `[\p{L}xxxx]`.dup;
    foreach(a; 'a'..'z')
    foreach(b; 'a'..'z')
    foreach(c; 'a'..'z')
    foreach(d; 'a'..'z')
    {
        buf[$-5] = d;
        buf[$-4] = c;
        buf[$-3] = b;
        buf[$-2] = a;
        cnt += regex(buf).charsets.length; //touch Regex object
    }
    sw.stop();
    writefln("%s, in %s ms; %g patterns/s", 
        cnt, sw.peek().msecs, cnt/(sw.peek().msecs*1e-3));
}
```