Implement AA byPair.

Resurrected from https://github.com/D-Programming-Language/druntime/pull/574.

The basic idea is to provide this functionality in druntime, and if people insist, add a wrapper to Phobos that returns `Tuple`s as people clamored for last time. Or just recommend users add this one-liner wrapper to their own code:
````
auto r = aa.byPair().map!(a => tuple(a.key, a.value));
````
then you'll a `Tuple` range out of it for no extra charge. :-)
I found a better way to do this. Instead of using key and value as field names, use the tuple as the field, and opDispatch the key and value.

Note that this means the tuple must be a tuple of pointers. An example I whipped up:

```D
struct S(T...)
{
    T x;
    ref opDispatch(string s)() if(s == "key") {return *x[0];}
    ref opDispatch(string s)() if(s == "value") {return *x[1];}
    alias x this;
}

void main()
{
    int a;
    string b;
    S!(int*, string*) s;
    s[0] = &a;
    s[1] = &b;
    a = 1;
    assert(s.key == 1);
    b = "hi";
    assert(s.value == "hi");
}
```