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
Sorry, I made a style change, so it might be hard to see the actual change. A better diff would be to change:
From:
```D
const m = cast(void*) source;
```
To:
```D
const m = *cast(void**) &source;
```
The new code takes the address of source (no possible hijack) reinterprets the address as a pointer to a `void*` type, and then dereferences it to get it as a `void*`.

In contrast, the old code did a straight up cast to `void*`. This would work most of the time, but in certain cases, an `opCast(T : void*)` or `alias void* this` can "hijack" the original intention of the code, creating wrong behavior.