Rework float definition

This definition is identical to the old one but it's compartmentalized
inside its own module.  This makes the code cleaner and separates
concerns.
Move integer/1 check into decimal//1 rule

Every time that decimal//1 is called in a generating context, it should
perform this check.  Make sure it happens that way instead of relying on
the caller to do it for us.