refactor(core) with repo

This PR introduces the repo to the `core` package. The primary objective is to share more code between the live node and the integration tests (dev/prod parity). A secondary objective is to make routing elegantly pluggable. A non-goal is to facilitate creation ephemeral instances (alternate datastores).

This is not ready for CR. There are some open items:

- [ ] who owns the repo resources? Repo or Node?
- [ ] implement offline RepoConfig
- [ ] pass sharness tests
- [ ] update all `NewIpfsNode` call-sites
- [ ] use the core constructor in integration tests (`epictest`)