code: @Pure
  	public static <C extends Capacity> C createSkillDelegator(Skill originalSkill, Class<C> capacity, AgentTrait capacityCaller)
  			throws Exception {
  		final String name = capacity.getName() + CAPACITY_WRAPPER_NAME;
  		final Class<?> type = Class.forName(name, true, capacity.getClassLoader());
  		final Constructor<?> cons = type.getDeclaredConstructor(capacity, AgentTrait.class);
  		return capacity.cast(cons.newInstance(originalSkill, capacityCaller));
  	}
docs: Create a delegator for the given skill.
  
  <p>The delegator is wrapping the original skill in order to set the value of the caller
  that will be replied by {@link #getCaller()}. The associated caller is given as argument.
  
  <p>The delegator is an instance of an specific inner type, sub-type of {@link Capacity.ContextAwareCapacityWrapper},
  which is declared in the given {@code capacity}.
  
  <p>This function fails if the delegator instance cannot be created due to inner type not found, invalid constructor signature,
  run-time exception when creating the instance.
  This functions assumes that the name of the definition type is the same as {@link Capacity.ContextAwareCapacityWrapper},
  and this definition extends the delegator definition of the first super type of the {@code capacity}, and implements
  all the super types of the {@code capacity}. The expected constructor for this inner type has the same
  signature as the one of {@link Capacity.ContextAwareCapacityWrapper}.
  
  <p>The function {@link #createSkillDelegatorIfPossible(Skill, Class, AgentTrait)} is a similar function than this
  function, except that it does not fail when the delegator instance cannot be created. In this last case,
  the function {@link #createSkillDelegatorIfPossible(Skill, Class, AgentTrait)} reply the original skill itself.
  
  @param <C> the type of the capacity.
  @param originalSkill the skill to delegate to after ensure the capacity caller is correctly set.
  @param capacity the capacity that contains the definition of the delegator.
  @param capacityCaller the caller of the capacity functions.
  @return the delegator.
  @throws Exception if the delegator cannot be created.
  @see #createSkillDelegatorIfPossible(Skill, Class, AgentTrait)