Speed up memory backend via a path -> node reverse mapping
Speed up memory backend via a path -> node reverse mapping

A simple reverse mapping/dict is added and used to avoid
repeated linear finding of paths, and metadata (and a little
tiny helper inode class) is added so that each node knows
its full path (avoiding repeated traversal to determine
this same info).

For linear flow with 500 'dummy' nodes on an old machine
running python 2.6 (your numbers will vary):

Old
---

Took 0.255 seconds to run building
Took 0.456 seconds to run compiling
Took 50.039 seconds to run preparing
Took 0.796 seconds to run validating
Took 2.853 seconds to run running

New
---

Took 0.254 seconds to run building
Took 0.457 seconds to run compiling
Took 30.780 seconds to run preparing
Took 0.776 seconds to run validating
Took 2.222 seconds to run running

Change-Id: Idc9ce88865b58a2dffd2e8955f0fab7f056d92b3

jimbobhickville/taskflow,junneyang/taskflow,pombredanne/taskflow-1,pombredanne/taskflow-1,openstack/taskflow,junneyang/taskflow,jimbobhickville/taskflow,openstack/taskflow