Combinatorial Multi-Armed Bandit: General Framework and Applications