code: public static <T> BufferedIterator<T> bufferedIterator(Iterable<T> self) {
          return new IteratorBufferedIterator<T>(self.iterator());
      }
docs: Returns a <code>BufferedIterator</code> that allows examining the next element without
  consuming it.
  <pre class="groovyTestCase">
  assert new LinkedHashSet([1,2,3,4]).bufferedIterator().with { [head(), toList()] } == [1, [1,2,3,4]]
  </pre>
  
  @param self an iterable object
  @return a BufferedIterator for traversing self
  @since 2.5.0