Add/more error reporting

This fixes common errors like:

```jade
if (foo) {
  p Foo is true
}
```

which used to attempt to compile to:

```js
if ((foo) {) {
  buf.push('<p>Foo is true</p>')
}
```

which is a syntax error.  We can produce much better reporting by catching as many syntax errors as possible in either the lexer or the parser, since they know the correct line number.