Refactor

This is a large PR that's mostly pulled over from refactoring work done on the LLVM branch but here's the main idea:

1. The `core` and `db` packages have been combined into one `db` package.

2. Tables are totally isolated into a single Bolt DB file. This DB contains the metadata, shards, and factors.

3. Data access and mutation is all done through `db.Tx` which is attached to a `Table`. This means we have more flexibility in batching changes together.

4. Queries now run in a single reader Tx instead of spreading across multiple shard databases.

5. Changes to `query` and `server` to support changes in the API.

All transactions are clearly delineated using the `Table.View()` and `Table.Update()` functions. There's no use of Begin/Commit/Rollback which could cause long running read transactions.

---

/cc @snormore @mkobetic