Uses the BuildStructureChanged event to extract available projects

@Warry, can you please take a look at this PR before it's getting merged.
The project drop-down list doesn't look good in Chrome on OSX (haven't tried FF) with this update.
Leaving the build page and coming back makes the browser render the list okay so it seems to be some UI trick that's needed.

I think current project can just be a client side concept. That is, when we send executions we want to be project scoped we set the scope when we requestExecution. It is probably simpler to use the requestExecution that takes a ScopedKey instead of the one that takes a string, so we don't have to worry about parsing; we could analyzeExecution or lookupScopedKey on "compile", get back a ScopedKey, add project scope to that, then requestExecution using the scoped key. We have to add a way to call the ScopedKey overload of requestExecution from JS.

If we set the current project on server side it would have global to all clients scope which promises to be a mess. We may even have our own usages that we don't want to be project scoped. I think current project should maybe only apply to this tab that the dropdown appears on?