path: added parse() and format() functions

The parse() function splits a path and returns an object with the different
elements. The format() function is the reverse of this and adds an objects
corresponding path elements to make up a string. #6976
should use assert.