For obvious reasons, we do a lot of property lookups. This needs to be made as fast as possible. It looks like we might be doing a lot of allocations when trying to find a property. I suspect part of the reason for this is that when a property isn't found, it returns a NotFound, which contains two lists of places where it looked. We end up going up the chain sometimes, creating NotFound's until we find a property, at which point the NotFounds are discarded and the Found is returned. This is very useful for diagnostics when a property isn't defined. However, many properties come form the default, so we end up creating lots of NotFound's that end up being discarded.
Instead of gather up places looked we should have two functions. The first function just looks up the property chain for the property, and either returns an Option[String], either if found it or it didn't. If it wasn't found, then we have a second function that will gather up the places it looked to print the error message. This should help to reduce list allocations that just get thrown away and speed up property look ups.