Bring in the typewriter branch

This was a long-lived branch, around 6 weeks. The architecture should be a lot better, as well as the testing. But of course regressions are possible.

I will mark this with a [release](https://github.com/clipperhouse/gen/releases) 2.0 tag following semver conventions, since there are some behavioral changes.  If there are regressions for you, you can use gopkg.in to stick with 1.0.

Two important behavioral changes:

- Each typewriter now outputs a separate file, eg `_gen.go` and `_container.go`. This should not be a breaking change. Formerly, there was a single `_gen.go` file
- Previously-gen’d files which have been ‘un-gen’d’ (i.e. removed a tag) will not be deleted as before. Do ttis manually if need be, but I hope it’s an edge case. Will consider adding it back in.

The contents of you gen’d files may be slightly different, but their behavior should be unchanged. If the behavior is changed, please let me know via a GitHub issue, or Twitter, or…