Kevin takes me to task over my poor design skills.  Take a look over: here

In my defense, i was going for simple and understandable.  Unforunately it turned out in a certain scenario there was also an unfortunate perf impact.  Now, i have drastically improved that running time by profiling and attacking 3 low hanging fruit areas.  A change of only about 10 lines of code total ended up increasing perf by about a factor of 10 here.  However, there are still certain design decisions that could be made for even better performance.  However, i'm somewhat loathe to make the changes given that they will be more complicated and i'm trying not to futz around with the core language service logic as it is quite risky at this point.