force a passive/restart checkpoint when certain thresholds are reached

We have 3 thresholds now:
GC_MIN_PASSIVE_WAL_PAGES: run outside a commit / outside the request handler (doesn't delay clients)
GC_MAX_PASSIVE_WAL_PAGES: forced inside a commit (like sqlite's auto-checkpointing)
GC_MAX_RESTART_WAL_PAGES: forced anywhere