feat(level-core): currentSchedule and materialize bridges
The two bridges between a ResolvedProject and a Schedule. currentSchedule
reads existing source dates into Schedule form, so round-trip identity
holds before any search has run — the no-search-yet case is first-class.
materialize goes the other way, carrying the entire source ProjectFile
through and overriding only start/finish/duration for tasks present in the
schedule, so a partial schedule passes the rest through untouched.
Durations are re-emitted in the source unit via the project's unit
conversions, and both honor per-task calendars. A mode change throws until
mode selection is implemented.