code: public final Ix<T> retain(IxPredicate<? super T> predicate) {
          return new IxRetain<T>(this, nullCheck(predicate, "predicate is null"));
      }
docs: Removes those elements via Iterator.remove() from this sequence that don't match the
  given predicate.
  <p>
  The result's iterator() forwards the calls to remove() to this' Iterator.
  @param predicate the function called with the current element and returns false
  if that particular element should be removed.
  @return the new Ix instance
  @throws NullPointerException if predicate is null
  @since 1.0
  @see #remove(IxPredicate)