auto persist workspace

fixes https://github.com/dart-lang/spark/issues/2621 - deleted folders showing up when spark is re-launched.

The workspace now auto-persists the roots whenever one of them is modified. Previously, clients of the api were responsible for knowing the persist the workspace after they made top-level modifications.

@keertip
kk, changed this to return the Future from _save - we won't return from `_refreshSyncFS` until the whole operation is complete.