doubly linked list as template implementation
- DNode< T > * begin ()
- DNode< T > * end ()
- bool append (const T &value)
- bool clear ()
- bool contains (const T &value)
- bool empty ()
- T & find (const T &value)
- T & first ()
- T & last ()
- bool prepend (const T &value)
- bool remove (const T &value)
- bool removeFirst ()
- bool removeLast ()
- unsigned long size ()
- T takeFirst ()
- T takeLast ()
- void print ()