isEqual and hash for JSQMessage
copy placeholder
tweak timestamp
less stringly-typed obj-c