Split DList Node into DNode and PayNode.

This splits the "Nodes" in DList into two types of node:
- The "base" DNode that has no payload.
- The "derived" PayLoad: A DNode with a payload.

Doing this helps avoid allocating a T for no reason in the sentinel node. It should also remove some template bloat, as a few functions actually had no dependency on the type carried by the payload.

@DmitryOlshansky : What do you think?
True dat. I had written something along those lines at first, but noticed I could copy paste from above.

I wonder if in some distant future though, how this kind of code will interact with escape analysis?