Don't rely on gcc extensions

Make the code more compatible with different compilers.
clang doesn't allow extra static qualifiers on template
specializations, const qualifiers on function types,
or inline attributes on lambda functions, and is more
picky about casting away constness with reinterpret_cast.

These modifications are compatible with both gcc and
clang.

Change-Id: I739b10df2780bec537827a13679fd2bcc2cc7188
Signed-off-by: Bernhard Rosenkränzer <Bernhard.Rosenkranzer@linaro.org>

Conflicts:
	runtime/entrypoints/entrypoint_utils.h
	runtime/entrypoints/portable/portable_invoke_entrypoints.cc
	runtime/entrypoints/quick/quick_invoke_entrypoints.cc
	runtime/gc/collector/mark_sweep.cc
	runtime/gc/collector/semi_space.cc
	runtime/interpreter/interpreter_common.h
Enable building ART with clang

Change-Id: I36bf66a90dfc03d27e2888d24d074a37fdac67d3

Fix compile error and silence the chatty ART if it is built with clang

Change-Id: Ia23c95fc56d0334622f0ff1e59ed7d579af16211