Automatic snapshotting for Packrat projects

This change enables automatic snapshotting for Packrat projects. The automatic snapshot is performed asynchronously by a separate R process, and performs exactly the same operations as Packrat's existing automatic snapshot mechanism (in fact it retrieves these operations from Packrat). Packrat's existing automatic snapshot mechanism takes a snapshot every time a command is executed; the goal of this change is generally to enable automatic snapshotting but to snapshot only when the library has undergone a meaningful change. 

Once the restore dialog changes are in, we can plug them into the new client event emitted when a restore is needed.
The rsession process is NOT multi-threaded and all file monitor events are delivered serially. There is a form of parallel execution possible though, if we execute R code at any point then the ProcessEvents callback can get invoked and cause additional pseudo-parallel execution paths. The way to defend against this is a re-entrancy flag though not a mutex (I haven't thought about it in detail but I'd be worried that the mutex might have some deadlock behavior we haven't considered -- perhaps just being over-paranoid here)