Add compiler plugins.

AST plugins allow consumers to preprocess and manipulate the AST. This allows more efficiency in final compiled output and helps downstream consumers use much more idiomatic helper code but provide a human readable usage.

For example:

```javascript
{{#each foo in bar}}
{{/each}}
```

Can be preprocessed and transformed into:

```javascript
{{#each bar keyword="foo"}}
{{/each}}
```

----

Credit to @mmun for most of this code, any mistakes are my own.