significant refactor

simplify things, improve clarity, replace hand-rolled graph algorithm with
JGraphT, a java graph lib, which has a cycle-detector which will help but is
not used yet, scope inheritance is now managed by storing a PersistentArrayMap
for each edge ... cycles are not allowed, I seem to have designed it to allow
cyclic dependencies, but now I'm not sure why I thought that made sense so
I've done away with it ... example in play compiles