Use reinterpret cast is [does|may]PointTo

Instead of a straight up cast. Avoids problems related to opCast or alias this, such as those in:
http://forum.dlang.org/thread/vldwvnuivsfwjozqiuup@forum.dlang.org
> because `*cast(void**) &source` ...

Yeah, it reads weird at first, but if you replace `void*` with `T`, then it becomes "standard" C-style reinterpret cast (`*cast(T*) &a`) which isn't actually that hard to read. It's the fact that in this case, the type is `void*` that kind of throws us off, due to the extra asterix; I had to ask learn how do this:
http://forum.dlang.org/thread/uignsankcumgmhwpoead@forum.dlang.org

Off course, we could always introduce an actual library function :
```D
template reinterpretCast(T)
{
    ref T reinterpretCast(U)(ref U source)
    {
        return *cast(T*)&source;
    }
}
```

But that's beyond the scope of this pull of course.