Gcode: Again ensure no allocations occur

For some reason `const char std::string::operator[]` still assumes that
things might be mutated. `const char& operator[]`, on the other hand,
appears to do the right thing. I'll admit that this is evidence that
`std::string` is just too subtle here. Perhaps a homebrew string type is
in order.