Keep Reusable Code Outside of package main

This PR moves the bulk of the log-shuttle code into an externally usable package and keeps only the executable bits in `package main`. This allows other go programs to import log-shuttle into their software.

This became important to us as we're developing some Go software and, rather than executing log-shuttle as a separate binary, we preferred to import the log-shuttle code directly and keep it all in the same process which is impossible under the current architecture. This refactor makes that doable.

The one other change is the migration of the header computation functionality in `config.go` to an exported function. As you can imagine, if one were to use this software via a go import, they may want to configure it in ways other than via command line flags, so it's important to be able to set the private header fields once a Config is setup. The rest of the code is just moving files into a subdirectory, changing the package name, and adding package name prefaces to all the log-shuttle fields referenced in main.

Let me know if there's any changes I could consider to make this more attractive.

Thanks,
Jeff