anchor.diff:   * A multimap implementation that uses [List]s to store the values associated
    * with each key.
    */
  -class ListMultimap<K, V> extends _BaseMultimap<K, V> {
  +class ListMultimap<K, V> extends _BaseMultimap<K, V, List<V>> {
     ListMultimap() : super();
  +  @override
     List<V> _create() => new List<V>();
  -  List<V> _wrap(Object key, Iterable<V> iterable) =>
  +  @override
  +  void _add(List<V> iterable, V value) { iterable.add(value); }
  +  @override
  +  void _addAll(List<V> iterable, Iterable<V> value) => iterable.addAll(value);
  +  @override
  +  void _clear(List<V> iterable) => iterable.clear();
  +  @override
  +  bool _remove(List<V> iterable, Object value) => iterable.remove(value);
  +  @override
  +  List<V> _wrap(Object key, List<V> iterable) =>
         new _WrappedList(_map, key, iterable);
     List<V> operator [](Object key) => super[key];
     List<V> removeAll(Object key) => super.removeAll(key);
  
positive.code:  * A multimap implementation that uses [Set]s to store the values associated
   * with each key.
   */
  class SetMultimap<K, V> extends _BaseMultimap<K, V> {
    SetMultimap() : super();
    Set<V> _create() => new Set<V>();
    Set<V> _wrap(Object key, Iterable<V> iterable) =>
        new _WrappedSet(_map, key, iterable);
    Set<V> operator [](Object key) => super[key];
  
negative.code: /**
   * Abstract base class for multimap implementations.
   */
  abstract class _BaseMultimap<K, V, C extends Iterable<V>>
      implements Multimap<K, V> {
    final Map<K, Iterable<V>> _map = new HashMap();
  
    // TODO(jacobr): for the following 6 methods we would prefer to specify that
  