We use a phantom type to distinguish between throttles, which have `max_concurrent_jobs >= 1`, and sequencers, which have `max_concurrent_jobs = 1`. All operations are available on both. We make the distinction because it is sometimes useful to know from the type of a throttle that it is a sequencer and that at most one job can be running at a time.

`type ('a, 'kind) t`````
`include sig ... end`
`val sexp_of_t : ('a ‑> Base.Sexp.t) ‑> ('kind ‑> Base.Sexp.t) ‑> ('a, 'kind) t ‑> Base.Sexp.t`
`include Core_kernel.Invariant.S2 with type (a, b) t := (a, b) t`
`type ('a, 'b) t`````
`val invariant : 'a Base__.Invariant_intf.inv ‑> 'b Base__.Invariant_intf.inv ‑> ('a, 'b) t Base__.Invariant_intf.inv`