util: speed up failure path of ByteToBase10

ready for review

The failure path for ByteToBase10 was not breaking out of the loop so the entire byte slice would still be scanned even if the first byte gave an error. Additonally a failure would allocate to create a new error. 

Benchmark before:
```
BenchmarkByteToBase10Valid	100000000	      20.8 ns/op	     0 B/op	     0 allocs/op
BenchmarkByteToBase10Invalid	20000000	      81.3 ns/op	    16 B/op	     1 allocs/op
```

Benchmark after:
```
BenchmarkByteToBase10Valid	100000000	      14.8 ns/op	     0 B/op	     0 allocs/op
BenchmarkByteToBase10Invalid	300000000	       4.68 ns/op	     0 B/op	     0 allocs/op
```