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
Sorry I never responded to this. The `DB` tracks the open transactions so it calculates the lowest txid whenever a write transaction starts:

https://github.com/boltdb/bolt/blob/master/db.go#L389-398

That's why it can release anything before the txid provided in `freelist.release()`.