Set DataLayout in codegen

DataLayout is apparently the replacement for TargetData in LLVM 3.2+. Without it, LLVM apparently doesn't optimize `memset`s into stores, but it looks like there are a lot of other optimization passes that make use of this information as well.