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.
Would queuing just entail keeping a counter and then running again if the counter > 0? (resetting the counter back to 0 at that point)