JAVA-1125 Change way remove(query) on gridfs is performed to improve performances

## Problem
While using a query to remove data in the GridFS (both [bucket].files and [bucket].chunks collections) the current driver first issues a select, and then loops over the results to run 2 removes (files and chunks) on each iteration.
On large resultsets, this behaviour can results in thousands of requests x2 (files and chunks).

I can understand that performing files and chunks removal, one after the other, is a way to limit data inconsistency. But there still is a risk. 

Thus, as long as the linked removal between files and chunks isn't managed by the server itself, the client side is responsible for checking whether both files and chunks are consistent. 

## Solution
This pull request for a remove(query) only issues 3 requests : 
 - one select on "files", 
 - and then a remove using the query on files 
 - and a remove with a $in clause on chunks.
Fields ids are remembered using a list. 
On a single remove this won't be a great improvement, but on large sets of files it'll be worthwhile.

[Fixes : https://jira.mongodb.org/browse/JAVA-1125]