code: @SuppressWarnings("unchecked")
  	public <T> T features(Class<T> interfaceClass) {
  		try {
  			for (Method method : interfaceClass.getDeclaredMethods()) {
  				methods.put(method, findInvocationHandler(method));
  			}
  			return (T) Proxy.newProxyInstance(interfaceClass.getClassLoader(), new Class[] { interfaceClass }, this);
  		} catch (NoSuchMethodException e) {
  			throw new PicklockException("cannot resolve method/property " + e.getMessage() + " on " + getType());
  		}
  	}
docs: maps the given interface to the wrapped class
  
  @param interfaceClass
  the given interface class (defining the type of the result)
  @return an object of the type of interfaceClass (mapped to the members of the wrapped object)
  @throws NoSuchMethodException
  if a method of the interface class could not be mapped according to the upper rules