Introduce thrift format for ingest

Definitely some questions around this - opening it up for discussion
You could reduce the overhead just be tagging the bytes with the version. Ending up with something more like:

```
struct ThriftV1ErrorData {
  1: binary bytes;
}
struct ThriftV2ErrorData {
  1: binary bytes;
}
struct TextErrorData {
  1: string line;
}
union ParseErrorData {
 1: TextErrorData text;
 2: ThriftV1ErrorData thriftV1;
 3: ThriftV2ErrorData thriftV1;
}
 struct ThriftParseError {
     1: string message;
     2: ParseErrorData data;
}

```