dlist: Use DoubleEndedIterator

Use DoubleEndedIterator to unify the iterators in extra::dlist. The double-ended iterators are straightforward and the .iter() and .mut_iter() simply use an elements left counter to make sure the iterator terminates at the right point.

Also fix a bug of mine in DList::merge, and DList::insert_ordered not being pub.