Spill to dirty pages, write to disk

@snormore There's a bunch of changes in this PR but the biggest thing is that it'll actually create a bucket and read it back out in a separate transaction! Woohoo! Small victories. :)

I also simplified the bucket meta storage (called `sys` in the code). It was a real bucket that required a cursor to traverse but that was a pain in the ass. Most of the time there will be a relateivly small number of buckets so we don't need to optimize for a huge number by using a B+tree. There's now a page type called `p_sys` that just stores a list of buckets. Easy peasy. It's not very optimized right now but we can improve that later.

Next up is reading and writing data in a bucket. It's partially there but I need to test it and clean it up. Also, there's no support for spilling buckets to pages. I can explain everything in more detail tomorrow.