Module to register and invoke callbacks

`type proc_callback_args````=` `{`

`get_proc_desc : InferIR.Typ.Procname.t ‑> InferIR.Procdesc.t option;`
`get_procs_in_file : InferIR.Typ.Procname.t ‑> InferIR.Typ.Procname.t list;`
`tenv : InferIR.Tenv.t;`
`summary : Summary.t;`
`proc_desc : InferIR.Procdesc.t;`
`exe_env : Exe_env.t;`

`}```
`type proc_callback_t``= proc_callback_args ‑> Summary.t```

Type of a procedure callback:

- List of all the procedures the callback will be called on.
- get_proc_desc to get a proc desc from a proc name
- Type environment.
- Procedure for the callback to act on.

`type cluster_callback_args````=` `{`

`procedures : (InferIR.Tenv.t * InferIR.Procdesc.t) list;`
`get_proc_desc : InferIR.Typ.Procname.t ‑> InferIR.Procdesc.t option;`
`exe_env : Exe_env.t;`

`}```
`type cluster_callback_t``= cluster_callback_args ‑> unit```
`val register_procedure_callback : ?⁠dynamic_dispatch:bool ‑> InferBase.Language.t ‑> proc_callback_t ‑> unit`

register a procedure callback

`val register_cluster_callback : InferBase.Language.t ‑> cluster_callback_t ‑> unit`

register a cluster callback

`val iterate_callbacks : Exe_env.t ‑> unit`

Invoke all the registered callbacks.