[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.
I have no idea if any other SQL systems do like this. The only extra  complexity it adds is the type casting in `GetItem` and `Substring` as I see. But I can not tell if the memory benefits is worth doing this. It may depend on how often the type casting is happened. If the time complexity issue is a big concern here, I can remove the byte and short types. Please let me know that. Thanks.