Add IrNameSource

This handles the allocation of local and global variable names.
Previously IrBlock was allocating them via IrBuilder. Unfortunatey,
local variables have function scope. This means in a function with
multiple blocks the variables would immediately conflict

It also adds support for using a basename if a more descriptive variable
name is wanted
Make IrLabel package private

IrLabel should not be constructable outside of IrNameSource
Add IrGlobalVariableDef

This generates IR for global variable definitions. These are similar to
function definitions except they define pointers to data in memory
Prefix string constants with c

LLVM IR string constants look like c"Hello, world!". This doesn't appear
to be well documented but it's what Clang generates and llc accepts.
Make all local variable allocations require a name

This means all instructions that allocate results now take a result name
as their first parameter list.

The previous method of allocating result variable using sequential
integers had two problems:
1) It conflicted with LLVMs unnamed value numbering
2) It didn't convey the meaning of the variable which made the generated
   IR hard to follow
Don't include parameter attributes in call IR

I'm not sure what led me to believe they were expected