Packs `Probe_id.t` and `Time_ns.t` into a single `int`.

The goal of `Short_header` is to pack a `Timer.record` into one word (we want to write an integer number of words for alignment, and don't want to pay for the size or time of writing a second word if we don't have to).

A short header "contains" an `Probe_id.t` and a `Time_ns.t`. A short header is a single word / integer; we have 63 bits to play with. The 9 most significant bits contain `Probe_id.to_int_exn`; the remaining 54 bits contain a time, stored as a number of nanoseconds from some `Profiler_epoch.t` (the epoch is written into the header; see `Writer.write_epoch`).

2 ** 54 nanoseconds is approximately 208 days. The epoch is set to equal a little before now when OCaml starts up, so the header should continue to work for ~208 days after that.

`val id_bits : int`
`val time_bits : int`
`val max_id : int`
`val max_time_diff : Core.Time_ns.Span.t`
`val pack_exn : Profiler_epoch.t ‑> Probe_id.t ‑> Core.Time_ns.t ‑> int`
`val pack_unsafe : Profiler_epoch.t ‑> Probe_id.t ‑> Core.Time_ns.t ‑> int`
`val unpack_id : int ‑> Probe_id.t`
`val unpack_time : Profiler_epoch.t ‑> int ‑> Core.Time_ns.t`
`val unpack : Profiler_epoch.t ‑> int ‑> Probe_id.t * Core.Time_ns.t`