Custom step

James, 

this is the functionality I mentioned before.
This allows the usage of `node.custom_step('friend')` or `node.custom_step('out.out').

I made a few changes, which I believe are rather independent from the implementation details of lower layers. I send them in different pull requests.