add ABIInfo trait and separate x86-64 ABI implementation from foreign trans

ABIInfo provides a method to translate the type of foreign function.
The foreign trans uses the method to get ABI-specific type and
uses the result to generate LLVM instructions for wrapper and shim functions.
Merge pull request #4590 from crabtw/abi

add ABIInfo trait and separate x86-64 ABI implementation from foreign trans