Refactor blocks, programs and inverses

I've untangled the parsing of programs and inverses in blocks. This simplifies the grammar and reduces the amount of parsing logic that has been pushed into the AST Node constructors. Namely, ProgramNode no longer is concerned with inverses and BlockNode no longer requires passing in the closing token.

In order to simplify the grammar further I also added an `INVERSE` token to avoid conflicts with the `openInverse` production. See https://github.com/wycats/handlebars.js/pull/834/files#diff-6.