Tentatively moving some things to abstract linkedlist
Finished DoublyLinkedList notes on my choice inside

In terms of the abstract idea of a doubly linked list and inheritance I
think this implementation of doubly linked list makes the most sense,
however I acknowledge that there are a lot of casts and there are
reasons why that may not be a good thing. But, those really shouldn't
apply if this is done right.