fix: close globals file after reading it.
ast/MsgNode: add "meaning" attribute
{msg}: do not allow msg or control structures within msg tags
ast/parse: add MsgPlaceholderNode
soymsg, soyhtml: support for raw text messages

- soymgs.Message and .Bundle interfaces
- bundle may be provided to soyhtml.Renderer
- {msg}s will be looked up in the bundle
- message id calculation ported from official soy
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)
HTML Tag placeholder support in messages.

It uses regexp rather than the HTML tokenizer due to soy's support for illegal
HTML attributes like </a phname="foo">
move setting of globals to a parse pass, to enable parsing of templates without
knowing globals in advance.
PO message extractor, using a forked version of gettext-go