Fix memory leaks detected in fuzzing
The "filter_filter" callback receives ownership of the parsed rules, so the fuzzing code must free them.
Destroying the parser structure must also destroy the read data buffer. Free the data buffer also after handling an incoming packet if the API doesn't transfer ownership of the data (i.e. the *_packet callbacks).
With these changes it's finally possible to run in excess of 1.7 million fuzzing iterations without noticable memory leaks. LeakSanitizer no longer reports after a few iterations.