Refactor string functions, fix many defects.

It's because the data field in the RDM frame itself may have something other than a valid enum in it. Otherwise we'd need something like:

bool IsValidResponseType()
rdm_response_type ResponseType()

And then at some point we'd end up adding

uint8_t RawResponseType()