code: public <B> TreeNode<B> map(final Function<? super T, ? extends B> mapper) {
  		final TreeNode<B> target = of(mapper.apply(getValue()));
  		fill(this, target, mapper);
  		return target;
  	}
docs: Returns a new {@code TreeNode} consisting of all nodes of {@code this}
  tree, but with a different value type, created by applying the given
  function to the node values of {@code this} tree.
  
  @param mapper the node value mapper
  @param <B> the new node type
  @return a new tree consisting of all nodes of {@code this} tree
  @throws NullPointerException if the given {@code mapper} function is
  {@code null}