[scenic][escher] Simplify Semaphore Logic in BatchGpuUploader

The BatchGpuUploader places the "batched done" semaphore on all targets
and sources passed into the uploader. This semaphore is passed to the
GPU when the batch is submitted.

The Semaphore logic also detects and protects against a direct cycle
where the same batch uploader is used on a resource for multiple reads
or writes. The BatchGpuUploader must provide memory barriers for the
write-write or write-reads on the same memory in a command buffer. See
SCN-1197 for more info.

SCN-838 #comment
SCN-1197 #comment

Tested:
- updated unittests and ran scenic_tests and escher_tests on astro
- added tests for the semaphore handling to batch_gpu_uploader_unittest
- ran defalut on astro

Change-Id: I71e8b9175d6edeaf3b291c4ea0e0df5f7b2f5f39
11 files changed