Support for Execution environments

`type file_data`````
`type t````= private` `{`

`proc_map : file_data InferIR.Typ.Procname.Hash.t;` | (** map from procedure name to file data *)
`file_map : file_data InferBase.SourceFile.Hash.t;` | (** map from source files to file data *)
`source_file : InferBase.SourceFile.t;` | (** source file being analyzed *)

`}```
`val mk : InferBase.SourceFile.t ‑> t`

Create an exe_env from a source file

`val get_tenv : t ‑> InferIR.Typ.Procname.t ‑> InferIR.Tenv.t`

return the type environment associated to the procedure

`val get_cfg : t ‑> InferIR.Typ.Procname.t ‑> InferIR.Cfg.t option`

return the cfg associated to the procedure

`val get_proc_desc : t ‑> InferIR.Typ.Procname.t ‑> InferIR.Procdesc.t option`

return the proc desc associated to the procedure

`val iter_files : (InferBase.SourceFile.t ‑> InferIR.Cfg.t ‑> unit) ‑> t ‑> unit`

`iter_files f exe_env` applies `f` to the source file and tenv and cfg for each file in `exe_env`