code: public AC start(String taskName, Object... args) {
  		final ProfilingTimerNode parent = current.get();
  		current.set(findOrCreateNode(String.format(taskName, args), parent));
  		return new AC() {
  			@Override public void close() {
  				// return to the parent that we had when this AC was created
  				current.set(parent);
  				// close all the elements in the subtree under current
  				if (parent != null)
  					stopAll(parent);
  			}
  			private void stopAll(ProfilingTimerNode current) {
  				for (ProfilingTimerNode child : current.children.values()) {
  					stopAll(child);
  					child.stop();
  				}
  			}
  		};
  	}
docs: Indicates that a new task has started. Nested tasks are supported, so this method
  can potentially be called various times in a row without invoking {@link #end()}.
  
  <p>
  Optionally, this method can be used in a try-with-resources block so that there is no
  need to manually invoking {@link #end()} when the task at hand finishes.