Support auto-creation of full path in ProtocolSupport.EnsureExists(...)

EnsureExists would only succeed if all parent nodes had already been
created before.  To follow the spirit of "Ensure*", this change works
through all the sub-nodes to make sure they exist, then creates the
final full path (writing the specified data only to the final node, not
the intermediate ones).