code: public static String join(Iterable self, String separator) {
          StringBuilder buffer = new StringBuilder();
          boolean first = true;
  
          if (separator == null) separator = "";
  
          for (Object value : self) {
              if (first) {
                  first = false;
              } else {
                  buffer.append(separator);
              }
              buffer.append(InvokerHelper.toString(value));
          }
          return buffer.toString();
      }
docs: Concatenates the <code>toString()</code> representation of each
  item in this Iterable, with the given String as a separator between each item.
  <pre class="groovyTestCase">assert "1, 2, 3" == [1,2,3].join(", ")</pre>
  
  @param self      an Iterable of objects
  @param separator a String separator
  @return the joined String
  @since 1.0