tpm: Add TPM NVRAM implementation

Provides TPM NVRAM implementation that enables storing of TPM
NVRAM data in a persistent image file.  The block driver is
used to read/write the drive image.  This will enable, for
example, an encrypted QCOW2 image to be used to store sensitive
keys.

This patch provides APIs that a TPM backend can use to read and
write data.

Signed-off-by: Corey Bryant <coreyb@linux.vnet.ibm.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
tpm: Share tpm_write_fatal_error_response

Move tpm_write_fatal_error_response to tpm.c where it can be shared
by multiple backends, and change the return code from void to the
size of the message.

Signed-off-by: Corey Bryant <coreyb@linux.vnet.ibm.com>
tpm: QMP/HMP support for libtpms TPM backend

This patch provides HMP 'info tpm', QMP 'query-tpm' and QMP
'query-tpm-types' support for the libtpms TPM backend.

Signed-off-by: Corey Bryant <coreyb@linux.vnet.ibm.com>
tpm: Provide libtpms software TPM backend

This patch provides a software TPM backend implementation. The
core software TPM functionality is provided by the libtpms
library.  With this patch, multiple guests can run with their
own emulated TPMs.

Signed-off-by: Corey Bryant <coreyb@linux.vnet.ibm.com>