Refactors Scheduler class.

* Timer is an abstract class now.
* Adds three new timers ( `TimerTargetSelector`, `TimerTargetCallback`, `TimerScriptHandler`) which are inherited from Timer.
* Adds new API 'scheduleCallback` / `unscheduleCallbackForKey', and callback's target could be any classes since we're using `void*` to identify target.
* `Scheduler::scheduleCallback` use `std::function`, therefore, it supports passing `lambda`, `member_function` and `global_function`.
* The old selector API is still kept since it's very useful when schedule callback is a member function, it doesn't need a `key` to identify the callback function. (+1 squashed commit)
* Adds relevant test cases.
TimerTargetCallback::initWithLambda -> TimerTargetCallback::initWithCallback.
issue #4165: Scheduler::scheduleCallback -> Scheduler::schedule, Scheduler::scheduleSelector -> Scheduler::schedule. APIs are clear for c++ developers now.
closed #4165: Deprecates old methods: Scheduler::(un)scheduleSelector, Scheduler::isScheduleForTarget.
closed #4165: Updates comments.
Merge pull request #5500 from dumganhar/scheduler-refactor

closed #4165: Refactors Scheduler class.