code: protected E put(Class<?> type, E element) {
  
      E old = this.classMap.get(type);
      putRecursive(type, element, type);
      return old;
    }
docs: This method registers the given {@code element} for the given {@code type}. Unlike a regular {@link Map} this
  method will also recursively put the given {@code element} for all {@link Class#getSuperclass() super-classes} and
  {@link Class#getInterfaces() super-interfaces} of the given {@code type}.
  
  @see Map#put(Object, Object)
  
  @param type is the {@link Class} used as key to associate the given {@code element}.
  @param element is the element to put.
  @return the element that was associated directly with the given {@code type} and has NOW been replaced with
  {@code element}.