Check whether expressions in compile-time asserts are static.

The previous definition of compile_time_assert made it easy to make the mistake
of writing an expression that was not a compile-time constant in one of these
assertions. The liberalism of modern GCC allows variable-bounded arrays to be
typedefed this way and just assumes the size will be valid at runtime. In
practice this led to undefined runtime behaviour.

Note that this commit also changes the expansion to an extern declaration
rather than a typedef. This still incurs no runtime overhead, but GCC more
thoroughly checks the validity of variable declarations than typedefs.

JIRA: VER-159