Javadoc
This function executes local and remote reads, and blocks for the results:
1. Get the replica locations, sorted by response time according to the snitch
2. Send a data request to the closest replica, and digest requests to either
a) all the replicas, if read repair is enabled
b) the closest R-1 replicas, where R is the number required to satisfy the ConsistencyLevel
3. Wait for a response from R replicas
4. If the digests (if any) match the data return the data
5. else carry out read repair by getting data from all the nodes.