code: <T> Mapping<T> begin(Mapping<T> mapping) {
          if (mapping == null) {
              throw new IllegalArgumentException("Method argument mapping must not be null");
          }
          OngoingMappings ongoingMappings = getOrCreateMappings();
          @SuppressWarnings("unchecked")
          Mapping<T> alreadyExistingMapping = ongoingMappings.get(mapping);
          if (alreadyExistingMapping == null) {
              trackNestedMapping(ongoingMappings);
              ongoingMappings.add(mapping);
          }
          return alreadyExistingMapping;
      }
docs: Contract: When invoked and <code>null</code> is returned,
  one <em>must</em> invoke {@link #end(Mapping)} after the corresponding mapping was executed.<br />
  Otherwise, a leak in the form of persisting thread-local attributes is introduced.
  
  @param mapping must not be <code>null</code>.
  @return The already ongoing mapping, or <code>null</code> if the given mapping has not occurred
  yet. The provided mapping <em>must</em> only be executed if this emthod returns <code>null</code>.
  Otherwise, the execution results in an infinite loop.