DList cleanup

This is a preliminary edit to cleanup DList. It contains only mostly trivial edits I want to get out of the way.

Changes include:
* Relaxing certain template restrictions thanks to smarter compiler overload resolution. Also, un-template certain functions (this `linearRemove(Take!Range r)`), because we can now overload templates and non-templates
* Templatize and constraint `opEquals`, for types that aren't actually comparable. I ignored the issue of mutable comparison.
* Make `front`/`back` inout.
* Add more checks in `Range` for invalidated ranges.
* A *lot* of "opConcat" re-write. Not sure it is worth looking at the diff on that one. Speaking of which, I question being able to concat a `DList` we have ranges and the slice operator.

Lastly, I moved around some functions, and marked sections, to have a clearer idea of the class layout: Concat, Insertion, Removal. Because of this, there is some noise in the diff, but I can guarantee NO CHANGES were made to code that was moved.

PS: I'll squash when the pull is approved.