Add freelist cache.

This commit adds a cache to the freelist which combines the available free pages and pending free pages in a single map. This was added to improve performance where freelist.isFree() was consuming 70% of CPU time for large freelists.

/cc @mkobetic @snormore
> I eschew embedded capital letters in names; to my prose-oriented eyes, they are too awkward to read comfortably. They jangle like bad typography. - Rob Pike

I've been back and forth on camel case in unexported identifiers. I just find it kind of ugly. :)

I ended up changing it to just be `freelist.reindex()` instead. Short and concise.