Addon version cleanup

This cleans up the AddonVersion code, dropping the strdup/free/malloc stuff for a std::string implementation.

Not sure about the dropping of .c_str() in favour of .asString().c_str() - we seem to use the former a bit more than we do the .asString() but ofcourse you need to do it if we're dropping m_originalVersion.

The advantage of doing so is you drop the potential for internal inconsistency, the disadvantage is it's a bit more to type.

Note: Added test cases as well to make sure I didn't screw up (I did initially, so it's kinda good that I took the time to do the tests!)