[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.
New commit makes it clearer and shorter.