Reorder and restructure ci jobs
Delete the check stage, instead run checkers (golangci-lint and staticcheck) in the test stage. It's desirable to have linting run after the build stage, since there's little point in linting code that doesn't even compile, and it's also desirable to have linting done in parallel with unittests, so that a lint failure doesn't block unittests from running.
Delete the separate race detector job, since merely building (go build -race) does not detect races. Instead add the -race flag to the unittests job (go test -race -v).