Use RoaringDocIdSet instead of FixedBitset for caching.

The default DocIdBitSet used for caching is currently the FixedBitSet implementation. For very sparse or dense bitsets, there are better implementations.

Lucene currently uses WAH8DocIdSet. https://github.com/elasticsearch/elasticsearch/pull/7577 suggested that ES should also switch to that implementation. The PR was rejected, in favour of getting the RoaringDocIdSet from Lucene 5. Upgrading to Lucene 5 was done in https://github.com/elasticsearch/elasticsearch/commit/610ce078fb3c84c47d6d32aff7d77ba850e28f9d, and it does indeed use the RoaringDocId implementation. 

For ES users with large indices, it would be beneficial if the filter cache did not use so much memory, even before ES uses Lucene 5 (seems to be targeted for 2.0). This PR uses the RoaringDocIdSet from Lucene trunk (with minor modifications) instead of the FixedBitSet implementation. For the modifications, see inline comments.

I've ran the test suite locally a few times, and it works. I did see some issues, but fixed them.
I like the exception better for the reason that you mentioned!