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.
That's a good question; this is indeed possible. After the snapshot we emit an event that will cause the client to requery the package state, at which point we'll discover that there is already a discrepancy. If we wanted to make this more unlikely we could queue checks instead of letting them fall on the floor, but it seems unlikely to start with so I didn't want to add the complexity (let me know if you feel/know this to be likely and I'll update.)