Drop potentially large number of string allocations for Signature parsing
This MR removes a bunch of string allocations from Signature parsing related code in different modules. These allocations could potentially be large, depending how the value being (de)serialized.
This MR also adds criterian-based benchmarks and I tried very hard to measure the performance improvements from rest of the changes here but the results seems to vary too much to be certain of the results. On average however, they should positive improvements in performance.