Cache available packages on startup

- This makes an asynchronous call to available.packages(), then copies
  over the generated .rds file to the current session's working
  directory on completion. This allows us to avoid the 2+ second stall
  on the first packrat::status of a session.

@jmcphers does this make sense or should we aim for something more fully baked (perhaps leveraging the IDE)? The `cacheAvailablePackages` function basically calls `available.packages()` in a sub-process, and copies over the `repos_http*` files generated to the current session.

This avoids the initial 2+ second warmup time on the first call to e.g. `packrat::status`, `packrat::snapshot`, and so on.