tpm: Prepare device implementation for handling send+recv together
tpm: Prepare device implementation for handling send+recv together

Cleanup only -- no functional change intended.

A lot of the current TPM virtio device is closely based on previously
existing virtio devices. This CL cleans up the TPM device in preparation
for a change that will let it handle send+recv as a single descriptor
chain.

  - Pass all EventFds together inside of the Worker object.

  - Introduce an Error enum to enable use of `?` error handling.

  - Introduce NeedsInterrupt enum to clarify meaning of return value of
    Worker::process_queue.

  - Simplify code for instantiating Worker and spawning thread.

TEST=run TPM playground inside crosvm

Change-Id: I4a9a4b379a28d2336a1d9f2dce46f013e647ea16
Reviewed-on: https://chromium-review.googlesource.com/1478381
Commit-Ready: David Tolnay <1480464b87745a0822a0e8b7545ca981d8e7352e@chromium.org>
Tested-by: David Tolnay <1480464b87745a0822a0e8b7545ca981d8e7352e@chromium.org>
Tested-by: kokoro <2ac7b1f3fa578934c95181d4272be0d3bca00121@google.com>
Reviewed-by: Daniel Verkamp <72bc170b46ec491f7bdd4359a1c0bfed274de40c@chromium.org>

google/crosvm,google/crosvm,google/crosvm,google/crosvm