QoS-Aware Cooperative and Opportunistic Scheduling Exploiting Multi-user Diversity for Rate Adaptive Ad Hoc Networks