Metagenomics: Techniques, Applications, Challenges and Opportunities