Win32: Make ATTRIBUTE_ALIGNED work

In DFAllocator, we want to ensure that the memory array is aligned to
the nearest 8-byte boundary, for performance reasons. Under GCC and
clang, we did this by placing an __attribute__ specifier *after* the
member name:

    char mem[0] __attribute__((aligned (8)));

This syntax is not supported under Visual C++. Instead, we must use the
following, where a different specifier is given *before* the member
name:

    char __declspec(align(8)) mem[0];

We already have the ATTRIBUTE_ALIGNED macro for the former case, but
this was defined to nothing for Visual C++. There is an assertion in
DFAllocatorAlloc that does a sanity check on the returned pointer to
ensure it's 8-byte aligned, and this was failing on windows due to the
mem array not being alinged.

Fortunately, GCC and clang both allow the __attribute__ specifier to be
placed between the type and member name, so we now use the following:

    char ATTRIBUTE_ALIGNED(8) mem[0];

with ATTRIBUTE_ALIGNED defined appropriately to either __declspec or
__attribute__ depending on the compiler.