add id to Val.t in ssa_builder
add id to Val.t in ssa_builder

Summary:
Vals in the SSA builder represent a set of writes that reach a variable at a given point in time. This is the same thing as the "ssa version" of a variable, except the SSA builder does not explicitly label the "Val.t" data with an id.

The analysis that determines what refinements reach which variables will need something more unique than just the set of writes to differentiate between different versions of a variable. Note that multiple variables can be "Uninitialized" at the same time, so keying refinements based on the write set would incorrectly apply a refinement from one refined uninitialized variable to another.

In order to ensure that we can distinguish between the different version of a variable, I'm adding explicit ids to that Val.t data type.

Extra care is taken in the next diff to ensure that merged ssa environments that do not add any new writes do not perturb Val.t ids.

Reviewed By: panagosg7

Differential Revision: D27476862

fbshipit-source-id: 24bf5b53b7273b6bc9ab01b05d19b73cd20c79b9

facebook/flow,mroch/flow,mroch/flow,facebook/flow,facebook/flow,mroch/flow,mroch/flow,mroch/flow,mroch/flow,facebook/flow,facebook/flow,mroch/flow,facebook/flow,facebook/flow