Use `fwd.Reader.Next`

This PR reduces function call overhead associated with the `Peek`/`Skip` cycle we were using for `*Reader` (decoding) methods before.

Speed-up is significant, particularly for `string`-heavy objects:

| Struct  | Before | After | Delta |
|:--------:|:---------:|:-------:|:-------:|
| Fast | 153ns | 144 ns | -5.8% |
| TestType | 845ns | 766ns | -9.3% |
| TestBench | 220ns | 167ns | -24.0% |
| TestFast | 126ns | 126ns | 0.0% |
| TestHidden | 282ns | 217ns | -23.0% |
| Embedded | 631ns | 521ns | -17.4% |
| Things | 906ns | 827ns | -8.7% |
| Custom | 472ns | 390ns | -17.3% |

So, on average, a 13% reduction in run-time for `DecodeMsg` methods. (I expect most real-world users will see slightly better than that, as I feel like `string` fields are under-represented in our benchmarks.)