Rename memcpy, memmove, memset to prevent any confusion with the C equivalents.

Closes #4203.
Make std::sync::semaphore() public
Factor out base::get_discrim_val from const translation
Allow consts' LLVM types to depend on their initializers.

Loosening the connection between the LLVM type and the Rust type
is necessary to use non-nullary enum constructors as const initializers,
because the const needs to be initialized with data of the actual type of
the variant in question, which is (generally) not the same as the u8
array in the `type_of` type.

Thus, referring to a const now requires casting the LLVM global to the
expected pointer type instead of using it as-is.
Allow consts to be non-nullary enum constructors
Omit needless zeroes for C-like variants of non-C-like enums
Add more tests for enum constants.

The tests have consts defined both before and after their uses in order
to prevent bugs that depend on the order in which they are translated.
Regression tests for passing enum-typed consts by reference.

If the PointerCast in trans_def_lvalue is removed, these cases cause
LLVM assertion failures.
core: Align cmp::le() with the other implementations

Also add comments reminding that IEEE 754 requires unusual semantics for
comparison operators as applied to NaNs (x != x, if x = NaN), in case someone
in the future wants to get clever.
core: Use libc::readlink function properly

The specification of readlink() says it's not guaranteed that the
returned contents of the symbolic link is null-terminated.
Make () actually size 0
For `for` loop bodies, translate the type of the closure
based on the expr_loop_body expression and not the inner closure
Fix long lines in for loop trans change
One more place where for loops and their bodies need to be unconfused.
Correct (I hope) amd64 ABI handling for empty structs
Make empty structs debug-printable
Make vectors (& old ports) of zero-size types allocate one byte each.
Merge pull request #4459 from jld/constenum

Allow consts to be initialized by non-nullary enum constructors
Merge pull request #4444 from JensNockert/pub-semaphore

Make std::sync::semaphore() public
Merge pull request #4411 from wting/4203_rename_memcpy

Rename memcpy, memmove, memset