net/http: synchronize "100 Continue" write and Handler writes
net/http: synchronize "100 Continue" write and Handler writes

The expectContinueReader writes to the connection on the first
Request.Body read. Since a Handler might be doing a read in parallel or
before a write, expectContinueReader needs to synchronize with the
ResponseWriter, and abort if a response already went out.

The tests will land in a separate CL.

Fixes #34902
Fixes CVE-2020-15586

Change-Id: Icdd8dd539f45e8863762bd378194bb4741e875fc
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/793350
Reviewed-by: Filippo Valsorda <5116fe0442846a38fe5f19d63723d023eca87d1d@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/242598
Run-TryBot: Katie Hockman <e321a8fd89c4908465ddaf8d5d0d62480efacb63@golang.org>
Reviewed-by: Filippo Valsorda <4f40cda291c5f9634e1affd3db44947af61f705c@golang.org>
TryBot-Result: Gobot Gobot <66cb808b70d30c07676d5e946fee83fd561249e5@golang.org>

golang/go,nawawi/go,CAFxX/go,golang/go,CAFxX/go,CAFxX/go,CAFxX/go,CAFxX/go,nawawi/go,cloudflare/go,cloudflare/go,nawawi/go,golang/go,nawawi/go,golang/go,nawawi/go,golang/go,cloudflare/go,CAFxX/go,cloudflare/go,golang/go,nawawi/go,cloudflare/go,cloudflare/go,nawawi/go,CAFxX/go,CAFxX/go,nawawi/go,golang/go,cloudflare/go,cloudflare/go,golang/go