filter method
Implementation
@override IList<A> filter(bool predicate(A a)) {
var rresult = nil<A>();
var current = this;
while(current._isCons()) {
final currentHead = current._unsafeHead();
if (predicate(currentHead)) {
rresult = new Cons(currentHead, rresult);
}
current = current._unsafeTail();
}
return rresult.reverse();
}