use offsetof to calculate the pointer to the struct

If the compiler inserts padding before the "buf" member of struct sds,
then "offsetof" is the correct way to calculate the beginning of the
struct.  The C standard specifies/specified that any padding be inserted
*after* the flexible array member, but most compilers don't do that.
There is a DR here: http://std.dkuug.dk/JTC1/SC22/WG14/www/docs/n983.htm

Also see http://std.dkuug.dk/JTC1/SC22/WG14/www/docs/n987.htm

Note that this commit doesn't change the current method of calculating the start of the buffer, but it adds an easy way to switch between the current method and the proposed method.

All tests pass.