Issue 10018 - Add VRP support for const/immutable variables
Merge pull request #3699 from lionello/bug10018

Issue 10018 - Add VRP support for const/immutable variables
Added __traits(valueRange, ..)
Use a stack of IntRange for if-else scopes
Added support for if-else ranges to CTFE
For integer comparisons, ensure the signed-unsigned comparison is safe.

1. If the sizeof(signed type) > sizeof(unsigned type), cast to unsigned to signed
2. If min(signed value) >= 0, cast signed to unsigned
3. If max(unsigned value) < max(unsigned type)/2, cast unsigned to signed-of-same-size
else the comparison is in error.