Release process

Adds a makefile target to build releases for different target architectures/OSes.

Also adds a script to upload the result as a github release.
I agree that `make` is designed to solve this problem, but that doesn't mean you should encode the entire dependency graph. E.g. what about all the `import`s, or the OS/architecture you're running on, or the version of Go, or (if it were possible in Go) linked static/shared library dependencies. All of these could hypothetically change since you last made a release, but practically speaking you need to weigh the cost (Makefile complexity) vs. benefit (speed increase times how often you run the target). In my experience most Go code compiles so quickly that you can avoid complex Makefiles.