Fix the representation of C void pointers in LLVM IR

Currently, we have c_void defined to be represented as an empty struct,
but LLVM expects C's void* to be represented as i8*. That means we
currently generate code in which LLVM doesn't recognize malloc() and
free() and can't apply certain optimization that would remove calls to
those functions.

Since c_void already has a comment that it should only be used for
pointers and not plain "void", and using it as plain void is already
wrong today, changing it from "empty struct" to "i8" should be fine.