fix Date#strftime %Y and %G: handle negative values in fourCharDigit()
Refactor the whole Time/Date formatting (strftime): RubyDateFormat

* Also fix negative timezone in getlocal19()
* And handle negative timezone with 0 hours
* Pass all sensible tests of MRI test_time.rb#test_strftime !!
  (was not passing half before)
* No null checks in TimeOutputFormatter, use a DEFAULT_FORMATTER
* Specify type of argument with an enum: FieldType
* Handle # (change case), padding with changed default padder and others
* Enjoy much cleaner code
* Generic useful methods in TimeOutputFormatter:
  formatNumber(), formatSignedNumber(), padding()
* Might need a little micro-optimization for padding()