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.
Removing unused function isdisjoint
For integer comparisons, ensure the signed-unsigned comparison is safe.

Removed case 3, since -1 might also mean ~0 in which case the result of
the comparison differs for unsigned vs signed.
Fix issue 259 Comparing signed to unsigned does not generate an error

Issue a deprecation warning, since an error causes template instantiations
to fail silently.
Fix issue 259 Check the range of the signed operand after optimization
Added check for cast to bigger signed type