code: public static <T> List<T> plus(List<T> self, int index, List<T> additions) {
          final List<T> answer = new ArrayList<T>(self);
          answer.addAll(index, additions);
          return answer;
      }
docs: Creates a new List by inserting all of the elements in the given additions List
  to the elements from the original List at the specified index.
  Shifts the element currently at that index (if any) and any subsequent
  elements to the right (increasing their indices).  The new elements
  will appear in the resulting List in the order that they occur in the original lists.
  The behavior of this operation is undefined if the original lists
  are modified while the operation is in progress. The original lists remain unchanged.
  
  <pre class="groovyTestCase">
  def items = [1, 2, 3]
  def newItems = items.plus(2, 'a'..'c')
  assert newItems == [1, 2, 'a', 'b', 'c', 3]
  assert items == [1, 2, 3]
  </pre>
  
  See also <code>addAll</code> for similar functionality with modify semantics, i.e. which performs
  the changes on the original list itself.
  
  @param self      an original List
  @param additions a List containing elements to be merged with elements from the original List
  @param index     index at which to insert the first element from the given additions List
  @return the new list
  @since 1.8.1