fix #29, spans for attributes

They're computed on demand from an Element's span, which should work well for web_ui. Also saves me from needing to thread them through the parser/treebuilder.

This needed various refactorings in how tokens work though:
* Only StartTagToken has attributes, EndTags do not have them
* data field is correctly typed for all tokens
* StartTagToken.data doesn't change from a list to a map
* normalizeToken moves to tokenizer, so parser doesn't mutate the token
* fix editor warnings

Review URL: https://chromiumcodereview.appspot.com//12678004