Rework type system. Types are assigned only in compile time instead of Expression construction time. Enforce type checks.