I think this method should also spend the budget. Ie. it should do this before it returns:

```
  bytesLeftInWriteWindow -= byteCount;
```

That way there's no way to interleave two calls to two synchronized blocks. I'm imagining something like this:

window is 100
thread A calls awaitWriteWindow(60) and that returns immediately
thread B calls awaitWriteWindow(60) and that returns immediately
thread A calls addBytesToWriteWindow(-60)
thread B calls addBytesToWriteWindow(-60) and we're in debt!