misc: add printree
printree: print a more compact tree
printree: allow limiting printed depth
printree: clean up paths (x/../y, leading /, etc.)
printree: allow printing a given subtree
printree: fix mistakenly printing the whole tree when given a nonexistent path
printree: replace while/shift with a for loop
printree: simplify code
printree: that feel when you write functions to do opposite things...

...and in the end, they turn out to do the same thing.
Merge branch 'wip/printree'

It's a simple script written in 15 minutes, but I wanted to keep the
history so I could look at it later and laugh.