Store singular fields as pointers

And do not delete memory of singular fields on clear.

This commit also fixes recursive messages, and reduces memory consumption
of messages with lots of unused fields.
test string performance
Option to specify which perftest to run
Replace ~str with StrBuf
refactor codegen