code: public static <T> T getAt(Iterable<T> self, int idx) {
          return getAt(self.iterator(), idx);
      }
docs: Support the subscript operator for an Iterable. Typical usage:
  <pre class="groovyTestCase">
  // custom Iterable example:
  class MyIterable implements Iterable {
  Iterator iterator() { [1, 2, 3].iterator() }
  }
  def myIterable = new MyIterable()
  assert myIterable[1] == 2
  
  // Set example:
  def set = [1,2,3] as LinkedHashSet
  assert set[1] == 2
  </pre>
  
  @param self an Iterable
  @param idx  an index value (-self.size() &lt;= idx &lt; self.size()) but using -ve index values will be inefficient
  @return the value at the given index (after normalisation) or null if no corresponding value was found
  @since 2.1.0