Prepare external version of pyxl for syncing with Dropbox internal version. Remove builtins in preparation for pyxl autoimport html namespace.
Scoping all html tags under the html module

This change is to avoid doing import *s in our code. Pyxl now automatically scopes all html tags, and tags like frag under the html module.

For this to work, the parser needs to append "html." to those tags, but leave other tags alone.

Part of this change also changes how rawhtml is implemented - its now a tag, but we provide the rawhtml function for convenience which just creates the <rawhtml> tag for you
Add Pyxl attributes
Quick fix to pyxl base for set_attributes
Add pyxl attributes
Add token to pyxl
Add pyxl html attribute
throw PyxlParseError instead of generic Exception when pyxl parsing fails
make pyxl work when using codecs.decode in addition to codecs.streamreader
adding codecs.incrementaldecoder for pyxl
Add a command-line wrapper mode to pyxl.codec.register.

The initial use for this will be to reinstate the compileall step
in the push process.  The actual logic for emulating the python
interpreter's command line and behavior comes from tornado.autoreload.
return unicode from __str__ instead of encoded str
Don't render pyxl comments
need to return a string from to_string - cannot be None so return empty string
pyxl: allow python comments in html blocks
making pyxl.html complete and correct

- had a bunch of missing tags: added those
- <tr> was repeated: fixed
- tags had missing or additional attrs: fixed these based on html4 spec
make pyxl parsing python 2.5 compatible and fix some bugs

pyxl was originally written for python 2.7. this means there is some funkiness with 2.5 that this diff fixes
- wrote our own untokenizer because the one from 2.5 sucks. it adds uneccessary spaces and does crazy things with indentation. the one here is similar to the tokenize.untokenize function from python 2.7
- dealing with unexpected jumps in rows and comments in a better way

also fixed a couple of bugs:
- make sure last_nw_token is present instead of assuming it is
- make pyxl token return an empty string as the line instead of None
prevent user error on non-unicode strings in our code, while still logging an exception
use common.util.report_exception instead of exclog2_util.report_exception
Catch invalid attribute sets in pyxl, and report a useful exception when that happens

Reviewers: dan

- Validates pyxl attribute sets based on the attr type.
- Tries to cast the value to the right type if possible.
- Reports an exception if that fails.

Moved over catching non-unicode in set_attr so that we can catch it at the place that it happens instead of when to_string is called later.

Added PyxlException for pyxl runtime exceptions instead of the generic Exception

TEST PLAN
 - ran unit tests
 - made sure setting the wrong type of attr resulted in an error
 - made sure unicode errors were automatically corrected while the exception was still reported