soymsg: messages with placeholders

- message ids and text now account for embedded (non-text) nodes.
- MsgNode.PlaceholderString() retrieves a string suitable for sending to translators
- soymsg.NewMessage() reads a message as it would come back from a translator
- soyhtml orders non-text nodes according to placeholders in translated message

TODO:
- HTML placeholders ({START_LINK}here{END_LINK})
- phname (user-provided placeholders)