Ensure "a += b" lhs is correctly promoted
Shift char example - raised both promotion and compound-upcast bug
Handle compound-op upcasting, including int-minimum

This fixes shifting values less than int in size, and tidies up the
compound-upcast logic.
Merge branch 'fix/compound-assign-upcast'

This brings in the char-shift changes.