Fix atypical error handling in `cmd` functions.

Closes #194

More changes to make the code base more Go idiomatic. Specifically, removed the logf utility function in favor of Printf. Additionally, where `cmd` functions were printing out an error and returning an error code, they now return the error directly, allowing main to print them before exiting with a non-zero code.
This is probably a good place for a custom error type:
```go
type unknownCommandError struct {
	cmd string
}
func (e unknownCommandError) Error() string {
	return fmt.Sprintf("Unknown command: %s", e.cmd)
}

// ...

	default:
		return unknownCommandError{cmd: cmd}
	}
```

This way, we could capture that as a special case error and only print the "unknown command" error once followed by the short usage.