LLVM IR Generation Improvements

- Prebuilt the entry block for each IR function and make it available as
  IrFunctionBuilder.entryBlock

- Allow creating child blocks from an IrBlockBuilder. This prevents
  having to pass an IrFunctionBuilder to any function that might want to
  create blocks. It also hopefully orders the outputted IR blocks in a
  more readable order

- Add IrBranchTarget trait that just contains a label. This should make
  it clear when something is being passed to a function strictly as a
  branch target versus a buildable block

- Separate IrEntryBlockBuilder and IrChildBlockBuilder.
  IrEntryBlockBuilder cannot emit "phi" instructions and can't be a
  branch target

- Rename entryBlock => startBlock in genTypeCheck to prevent confusion
  with IrFunctionBuilder.entryBlock