Don't call end() in the begin_end destructor

If a node throws an exception during phase execution, we shouldn't call
end() on all nodes, as this signals that processing succeeded.
runtime.h: Document some more methods