Pass the element type to getelementptr

Instead of passing pointer-to-element type just pass the bare element
type. This reflects the fact that getelementptr can only return
pointers. This also fixed a few tests and gen-types.py which were
confused about result type vs element type
Un-protect IrFunctionBuilder

IrFunctionBuilder needs to be created by callers to be passed to
IrModuleBuilder.defineFunction
Scala BoxedType generation improvements

- Make genTypeCheck expected a pointer to the base type instead of the
  type we're checking. This encourages not casting to the subtype until
  the type check has passed

- Add "Ptr" to the variable name returned by getelementptr. It makes
  more sense to reserve the field name for the value later loaded from
  memory

- Fix indentation of an exception throwing path
Convert NFI boxed types to LLVM pointer types

Boxed types are passed by pointers, never by value. Update
NfiTypeToIrType to reflect this.
Add NativeFunctionToIrDecl

This converts an et.NativeFunction produced by
frontend.ExtractNativeFunction in to an llvmir.IrFunctionDecl. This is
required to both declare and call the NFI function