use c++11 variadic templates in Compiler::call
use enum class in ir
use constexpr for ir::Type
reformat