manage memory usage for our analyzer integration

Add explicit memory management to our analysis integration:

- remove the limit of only processing dart projects with less then 100 files
- only allow 5 active analysis contexts. We maintain a MRU list, and dispose of older contexts when a new one is created and we pass the size threshold.
- if a project is deleted, we delete the associated context in the isolate
- before we process changes we bump the analysis cache for that context to a large number. After we're done processing the changes, we bump the number back down to a small number. Would like some feedback on the numbers I've chosen (256 and 64).

@bwilkerson, @scheglov, @dinhviethoa