sync: make WaitGroup more space-efficient
sync: make WaitGroup more space-efficient

The struct stores its 64-bit state field in a 12-byte array to
ensure that it can be 64-bit-aligned. This leaves 4 spare bytes,
which we can reuse to store the sema field.

(32-bit alignment is still guaranteed because the array type was
changed to [3]uint32.)

Fixes #19149.

Change-Id: I9bc20e69e45e0e07fbf496080f3650e8be0d6e8d
Reviewed-on: https://go-review.googlesource.com/100515
Reviewed-by: Dmitry Vyukov <05e8181be3150e47da8fe2e1f18d381c75496ff4@google.com>
Run-TryBot: Brad Fitzpatrick <ae9783c0b0efc69cd85ab025ddd17aa44cdc4aa5@golang.org>
TryBot-Result: Gobot Gobot <66cb808b70d30c07676d5e946fee83fd561249e5@golang.org>

codestation/go,josharian/go,josharian/go,akutz/go,cloudflare/go,golang/go,codestation/go,CAFxX/go,cloudflare/go,CAFxX/go,Cofyc/go,CAFxX/go,josharian/go,akutz/go,codestation/go,Cofyc/go,nawawi/go,josharian/go,codestation/go,CAFxX/go,golang/go,CAFxX/go,akutz/go,akutz/go,codestation/go,Cofyc/go,akutz/go,akutz/go,josharian/go,nawawi/go,cloudflare/go,CAFxX/go,codestation/go,nawawi/go,akutz/go,cloudflare/go,cloudflare/go,cloudflare/go,codestation/go,akutz/go,cloudflare/go,codestation/go,golang/go,josharian/go,nawawi/go,josharian/go,golang/go,golang/go,Cofyc/go,Cofyc/go,CAFxX/go,nawawi/go,josharian/go,Cofyc/go,golang/go,nawawi/go,Cofyc/go,golang/go,golang/go,CAFxX/go,Cofyc/go,nawawi/go,nawawi/go,cloudflare/go