Return error for over-long non-native decimal values.

Plus various cleanups.
Merge branch 'cleanup'