Since Borsh is not a self-descriptive format we have a way to describe types serialized with Borsh so that
we can deserialize serialized blobs without having Rust types available. Additionally, this can be used to
serialize content provided in a different format, e.g. JSON object {"user": "alice", "message": "Message"}
can be serialized by JS code into Borsh format such that it can be deserialized into struct UserMessage {user: String, message: String}
on Rust side.
Deserialize this instance from a slice of bytes, but assume that at the beginning we have
bytes describing the schema of the type. We deserialize this schema and verify that it is
correct.