Serializes a value into executor_pb2.Value.

We use a switch/function pattern in the body here (and in deserialize_value below in order to persist more information in traces and profiling.

value A value to be serialized.
type_spec Optional type spec, a tff.Type or something convertible to it.

A 2-tuple of serialized value and tff.Type that represents the TFF type of the serialized value.

TypeError If the arguments are of the wrong types.
ValueError If the value is malformed.