move dlist from core -> std

Closes #3549

The issue report has some reasoning, but I'd like to add that I don't think managed pointers belong in core. It's *possible* to write a safe doubly-linked list on top of `unsafe`, but it would be much more limited and I don't think there's much of a use case - it would lose a lot of flexibility. You're probably better off using a vector, hash table, tree, heap or ring buffer in almost every case.