Type inferer as class, and stricter static check.
Type inferer and predefined entities are no longer single objects. They can be instantiated like other classes. An SSA variable now has an `inferred type` field which represents its type. The type is filled in when loading a bundle, and can be dependedn on during execution. Added stricter static checking related to variable types.
Showing with 793 additions and 643 deletions