Create interface for collections which support removal.

Create an interface for collections which support removing items which
match a given predicate. Implement this interface in the ArrayList, singly
and doubly-linked list collections. Add extension methods for this interface
for removing values.

Add interfaces for types which support next and previous pointers and
implement these in the singly and doubly-linked node classes. Add extension
methods for enumerating sequences of these nodes forwards and backwards.