Adding RETRO model Faiss sharding index and KNN sharding index
# What does this PR do ?
To handle very large dataset, e.g. hundreds of gigabyte to terrabyte compressed raw data, we need multiple nodes to create sharding index  and combine them together.
It enhance the KNN index data structure to handling sharding index.

In this PR, it creates GPU Faiss index in 3 stages. 
  1. stage 0, train Faiss index structure. 
  2. stage 1, create Faiss sharding index
  3. stage 2, merge sharding index into one.

It creates KNN index in 2 stages.
  1. stage 1, create KNN sharding index
  2. stage 2, merge KNN sharding index into one.
  
It includes some unit tests to cover the KNN sharding index, dedup funcitons etc.

I have been used it to successfuly create Faiss and KNN index for 350G dataset in a slurm cluster enviroment. 