Store rows in time segments

This lays some of the groundwork needed for collapsing rows.

A few big items in this change:
* A timestamp is required on every inserted row
* Rows are grouped into time intervals -- no longer as one big byte array
* Time intervals are represented by N memory mapped files ("segments") of 100MB each.
* The table_file_path now represents a folder, not a file prefix. This
  is because we have many memory mapped files now, so having all of a
  table's files contained within a folder is more tidy.
* Inserted timestamps are truncated to match the duration of the time interval

I'm representing the start of time intervals as ints (seconds since
epoch). Let me know if you think using a proper Time type would be
easier to work with. I think one change we should make regardless is to
name the memory mapped files with readable timestamp strings, rather
than ints.

The persistence test now passes, but the rest of the tests and
benchmarks are broken because their fixtures need to be updated. I'll
tackle that next.
Update core and query tests to use new schema
Fix a bug preventing insertion of all but the first row
Update the query code to iterate through intervals & segments
Remove duplicated function from the utils package
Make the benchmarks work with the new schema
Patch up migrator and tests to work with the interval storage
Patch up the web server to use interval storage
Parameterize the segment size

This will be helpful for tests. I think at some point we should consider
just assignment Schema as a field of Table.
Add a basic test for the interval and segment allocation logic
Code cleanup
Use a small segment size so the persistence test runs quickly

For some reason, creating a 100MB instead of a 2k file adds 6s to the
test execution time.
Don't use allocate on-disk storage when running the bench suite

It adds 6s startup time.

Also, as an unfortunate side effect, the resources for these benchmarks
are initialized as part of our standard test suite, even though they're
not used.
Use time.Time to represent times, instead of ints

Our interval files are now more intuitively named as well.
Use time.Duration
Make the migrator tests run faster
Write table JSON directly to the file
Remove a few lingering pointers to slices
Use 100MB for segment size, not 1GB
Implement a formal distinction between dimension and metric columns

This provides the needed abstraction for collapsing rows. All metric
columns can be collapsed by summing them together.