port changes to `State::substates` from concurrency-regions branch

- changes signature of `substates`: accepts parameters `via` traversal
flags and `out` recursion output target object; returns object map of
paths to `State`s, instead of an array
add triple wildcard
add event delegation; fix guard predicate params; add tests