Float#floor and #ceil

This adds a method to convert a float to either a fixnum or bignum. It looks the way it does because we need to generate bignums for the same values as the parser, which doesn't use the unary minus for the overflow check.