Date.prototype.addXXX change & fix, execute job even if passed the date

The issue is with the "Date.prototype.addXXXX" functions.
It seems that there is too much logic there that makes things not work very well when crossing DST.

From my expression it seems that increments related to time should be treated only with "Date.setTime", as time is stored in UTC epoch time.

```
    date.setTime(date.getTime() + 1000) // 1 second
    date.setTime(date.getTime() + 60*1000) // 1 minute
    date.setTime(date.getTime() + 60*60*1000) // 1 hour
```

Use only these codes without the check of full interval (f.e. if (s == 60) {} )


While increments related to date (day, month, year) which is based not only on the UTC time, but also on the attached timezone and timezone's rules for DST, it isn't correct to use function like "setTime" which treats only the UTC time.

```
    date.setDate(date.getDate() + 1) // 1 day
    date.setMonth(date.getMonth() + 1) // 1 month
    date.setFullYear(date.getFullYear() + 1) // 1 year
```

Here also use only this simple commands, no extra checking for date == 31, month == 12, as JS does it automatically considering all the parameters.