code: public static <K, V> Map<K, List<V>> groupBy(Iterable<V> groupies, Function<V, K> grouper) {
          dbc.precondition(groupies != null, "cannot group a null iterable");
          final Supplier<List<V>> supplier = Compositions.compose(new Vary<ArrayList<V>, List<V>>(), new ArrayListFactory<V>());
          return new GroupBy<>(grouper, supplier, new HashMapFactory<>()).apply(groupies.iterator());
      }
docs: Groups elements from an iterable in the key evaluated from the passed
  function. E.g:
  <code>groupBy([1, 2, 3, 1], id) -> { 1: [1,1], 2: [2], 3: [3]}</code>
  
  @param <K> the grouped key type
  @param <V> the grouped value type
  @param groupies the elements to be grouped
  @param grouper the function used to group elements
  @return a map containing grouped values