Witness::from_slice and Decobale use different allocation strategies for reasons that are not immediately obvious (decoding must be done in a single parse where as from_slice can iterate the input multiple times.
This caused a bunch of discussion when moving to primitives, we should re-visit this code and see if we can do anything about it.
ref: #3406 (comment)