I'm uncomfortable with this assert for a few reasons:
1. If it fails (e.g. because range is 0 or too big) then `normalize(BigInteger)` will enter an infinite loop or just return an invalid value. Therefore a `checkState()` rather than assert seems right: I'd prefer it always to be run.
2. If the assert fails, it doesn't tell the user why (no `: "min="+min()+"; max="+max()+"; range="+range()`)
3. calling this code in the super-class' constructor is dangerous if the sub-class requires setting fields before `min()` etc will return the correct values. But we get away with this for the two current sub-classes.

Point (3) is the trickiest. There's no other nice place to check (without doing it many times, such as on every newToken). We could extract a `checkRangeValid()` method and call it from the sub-class' constructor. Or for now just put a TODO to warn people who are planning to sub-class.

(But this is nothing to do with the changes in this pull request!)