[JSC][Temporal] Implement Intl.DateTimeFormat Temporal support and toLocaleString
Temporal은 Date를 대체하기 위한 TC39 표준입니다. PlainDate, PlainTime, PlainDateTime, PlainYearMonth, PlainMonthDay, Instant 등 여섯 가지 날짜/시간 primitive를 도입합니다. Intl.DateTimeFormat은 ICU를 기반으로 동작하는 JSC의 locale 인식 formatter입니다. 두 subsystem을 연결하려면 type-aware dispatch, 처리 순서가 정해진 예외를 포함한 calendar validation, 그리고 timezone 선택 규칙이 필요합니다. plain type은 항상 GMT로 포맷하는 반면, Instant는 formatter에 설정된 timezone을 사용합니다.
이 commit에서는 HandleDateTimeValue, SameTemporalType, AdjustDateTimeStyleFormat, FormatDateTime, FormatDateTimeToParts, FormatDateTimeRange, FormatDateTimeRangeToParts가 구현되었습니다. 여섯 가지 Temporal prototype 모두에 toLocaleString도 연결되었습니다. 새로 도입된 TemporalFieldKind enum은 type별 ICU skeleton 필터링을 담당하며, 각 Intl.DateTimeFormat 인스턴스 내부에 lazy sub-formatter cache를 관리합니다. test262에서 건너뛰던 201개의 테스트가 제거되었습니다.
Significance
두 복잡한 subsystem인 Temporal과 Intl이 교차하는 대규모 코드가 추가되었습니다. 비대칭 validation 규칙(RangeError-before-TypeError 순서, PlainDate/PlainDateTime에만 적용되는 iso8601 예외), 그리고 인스턴스별 ICU formatter cache가 포함됩니다. 이 영역은 브라우저 엔진에서 역사적으로 버그가 자주 발생한 지점입니다.