SmallVectors are convenient, but they don't cover every use case.
In particular, they are fairly large (3 pointers + one element) and there is no way to take ownership of the buffer to put it somewhere else.
This patch then adds a lower lever interface that works with any buffer.
uint8_t * is better than char *, no?