Elaborate small-int/long-int

This is first patch towards supporting much more complete integer type implementation in uPy. This patchset introduces framework to have alternative long int type implementations as well as fixes various issues with small int handling (like detecting when they overflow).