Use native byte-swapping for de/serialization

Tests for and enables native byte-swapping instructions for de/serialization routines. These normally reduce to 1 machine op instead of a series of bit-shifts and bitwise ops as currently done.  For big-endian machines these reduce to no-ops.  Optimization works for GCC-like systems with endian.h header.  Also do some minor cleanup in other serialization code.

Changes
serialize.h:
	use machine native byte swapping if available, fall-back to previous generic method if not
	commented out unused de/serialization functions for signed bytes (S8)
	write/readARGB8() - just write 32-bit color in one op, instead of 4 1-byte ops
	cleanup: removed unnecessary buffer inits for some serialize-out functions
	use a #define for the fixed point factor in read/writeF1000()

staticobject.cpp:
	cleanup: use util/serialize.h inlines instead of its own de/serialization

nodemetadata.cpp, nodetimer.cpp
	minor optimzation/cleanup: slightly simpler deserialize node position method

serialize.cpp:
	minor optimization/cleanup: avoid generation of unneeded string temporary

CMakeLists.txt, cmake_config.h.in: added detection of endian.h
Thanks for asking.  This is me being pedantic.  GCC for some reason generates a divss instead of optimizing to a mulss instruction without it, but only if -ffast-math is not set (which is set for the normal build)
Related to this is the change of the constant from 1000. to 1000.0f.  Again because the C++ standard requires it '1000.' without the 'f' suffix is taken as a double, so GCC stores it as a double, cast the data to a double, multiplies, then casts back to float.  I doubt there's any significant precision gain from that.
So in summary, we can do away with the FIXPOINT_INVFACTOR and leave it as a division; but we should keep the constant as a float and not a double.