endian struct
more on endian types
Improve the auto-swapping struct a bit.

Specifically:
 * Don't override &&/|| - that kills short circuiting.
 * Consistently return a swapped type from operators.
 * Add a few more missing operators.
Move swap_struct_t to its own file.

This way bswap32() and friends are already defined.  Otherwise there are
errors.
Fix some compile failures under big endian.
Use u32_be where appropriate as well.
Switch to including Windows.h from an intermediate.

This makes it easier for Xbox which uses a separate header.
Always defined WIN32_LEAN_AND_MEAN.

Might as well, less mess everywhere else.
Use CommonWindows.h from Windows/ too.

Might as well.  Everything still builds fine.
Merge pull request #2972 from unknownbrackets/endian

Add endian swapping struct, use an intermediate for Windows.h