hw_string: add free_string fn

this only frees the storage of the string, not the string's struct itself
because we cannot guarantee that the string struct is malloc'ed -- could
be aggregated into another struct, could be on the stack.
http_response: clean up body, code
response: dont free body, status_code (not owned)