[SPARK-4358][SQL] Let BigDecimal do checking type compatibility and use more specified numeric types 

Remove hardcoding max and min values for types. Let BigDecimal do checking type compatibility.
There are few places that use `IntegerLiteral` to extract numeric value from Literal. Because `NumericLiteral` could actually be parsed to  `Byte`, `Short` now, `IntegerLiteral` also needs to add the support for them.