Fix compilation on MSVC.

MSVC was throwing error C2244 when trying to match some function
definitions to their declarations. This commit moves those
definitions to their declarations. The declarations are harder
for a human to read now, but at least all supported compilers
can understand it.