Make sure that temp file names don't already exist

When running a build of MLton that uses the mlton-stubs library,
generated file names weren't checked to see if they already existed.
This only affected the first build of MLton, so the error would manifest
when generating c and assembly files.  In particular, it could happen if
you were building the tools in parallel or building two versions of
MLton from seperate directories at the same time.

Furthermore, the mlton-stubs library uses a hard-coded seed for the
random number generator, so the temorary files had the exact same names
between all running instances of MLton.  So when running parallel
builds, the instance that finished first would delete portions of the
other instances' temporary files and those builds would fail.
Preserve types in RSSA to Machine translation of bogus operands.

An RSSA Offset operand with a non-location base is translated to a
dummy Machine Offset; in particular, to a zero Word of the appropriate
size.  However, this can lead to a Machine program with a statement
like the following:
    SP(24): Objptr (opt_3)  = 0x0
Although this only arises in dead-code, a codegen that targets a
language with a static type system (like an in-progress LLVM codegen)
may dislike the treatment of a word as a pointer.

When introducing a bogus operand, use a Cast operand to preserve the
expected type of the operand.
Merge pull request #20 from caltry/unique-tmp-filenames

Make sure that temp file names don't already exist.

It is noted that this does not completely eliminate the race condition, as the existence check is separated from the creation.  Of course, the `MLTON_IO.mkstemp` and `MLTON_IO.mkstemps` functions were added precisely because it is difficult to atomically create a unique temporary file with the existing functions of the Basis Library.
Merge pull request #21 from MatthewFluet/machine-il-bogus-op

Preserve types in RSSA to Machine translation of bogus operands.