improve snake case conversion regarding magic method: don't use underscore when before character is capitalized

before this commit. `DEPRECATEDSentence` will convert as `d_e_p_r_e_c_a_t_e_d_s_entence` when using magic method.
this unwanted behavior doesn't work some case. now it will convert as deprecated_sentence.

NOTE: this behavior only aims magic method name conversion. actual key or property name are `as is`.
if .proto file provides `DEPRECATEDSentence` field name. then property will same as DEPRECATEDSentence.
[protocolbuffers\message]fix memory leaak when passing value to undefined property name.