code: public List<List<T>> split(Predicate<? super T> predicate) {
          final List<T> a = Lists.newArrayList(), b = Lists.newArrayList();
          for (T elt: each()) {
              (predicate.apply(elt) ? a : b).add(elt);
          }
          List<List<T>> result = Lists.newArrayList();
          result.add(a);
          result.add(b);
          return result;
      }
docs: Return a <code>List</code> of two <code>Lists</code> generated by applying
  a predicate to each element; the first list contains those for which it returns true, the second, false.