implement __builtin_assert_no_side_effects

This implements __builtin_assert_no_side_effects, aka PR c/57612.

The idea is to have an easy way to assert that an expression is
side-effect-free.  This can be used in macros that expand their
arguments more than once, to ensure that the macro's user doesn't pass
in a side-effecting expression:

    #define multi_expand(x) (__builtin_assert_no_side_effects(x) + (x))

I considered whether the new error should be suppressed inside typeof,
alignof, and sizeof, but in the end decided that erroring is probably
ok; as I couldn't think of a scenario where I'd reasonably expect the
non-erroring behavior.

Built and regtested on x86-64 Fedora 20.