Improve ShinyApps deployment

This change improves the ShinyApps deployment process, and prepares it for handling deployment of Shiny documents. There are two main changes here:

- The dialog now lists the files to be deployed.
- The deployment now takes place in a child process, with output streamed to a new console tab.

There are also a couple of changes under the hood:

- The code that creates a child R process, maintains its running state, accepts termination, etc. has been factored into a new class, `AsyncRProcess`. This class is used to manage the R processes for HTML preview, R Markdown, R Markdown template discovery, and Shiny application deployment. 
- It is now possible for any tab in the IDE to become busy, and temporarily uncloseable. To do this, the `WorkbenchTab` just needs to inherit from `ProvidesBusy`, and fire a `BusyEvent` when its busy state changes.