Improved date change detection:
* rely on AngularJS $digest loop instead of $timeout service
* refactored DateService to be immutable and moved unsuitable code to DatesController
* better function naming
* DateService unit test