Improve code which tracks and rejects inverse transitions for numeric types based on the dscale.

We now only fail to perform inverse transitions if the final maximum value is removed from aggregation.
Also the logic for this has been moved into do_numeric_discard and that function now returns
false when it fails. I've also fixed the int*_accum_inv functions to complain if do_numeric_discard
returns false as it should only ever do so if the maximum dscale changes, but since dscale should always
be 0 for numeric types then it seems right that do_numeric_discard will just always work in this case.