v0.0.7c: restore git protocol, fix critical auth bugs, add per-repo permissions

The web UI had drifted apart from the git protocol implementation
during independent development - git clone/push were completely
disconnected, and several real security bugs had crept in. This
commit reconnects everything and fixes what was found along the way.

Critical fix:
- git clone/push were returning 404 - cmd/gogit's own web server
  never wired in internal/server, which contains the entire git
  protocol implementation. Restored via
  server.RegisterGitAndBrowseRoutes sharing one mux.

Security fixes:
- Passwords were stored in plain text in users.txt. Replaced with
  real bcrypt (vendored by hand from golang.org/x/crypto - see
  internal/vendored/README.md). BREAKING: existing users.txt entries
  are not valid bcrypt hashes, recreate accounts after this commit.
- "Private" repos were only private by name (strings.Contains on a
  naming convention). Replaced with the real git config
  gogit.private check, shared by the web UI and git protocol layer.
- Re-registering an existing username silently overwrote their
  password. auth.AddUser now rejects duplicates.
- Stale auth-store cache: the git protocol layer cached the user
  store at startup, so newly registered users couldn't push without
  a server restart. Both layers now reload the user file fresh on
  every auth check instead of caching a pointer.
- Repo list filter was IsDir() || HasSuffix(".git") - any directory
  showed up as a "repo". Fixed to &&.

New: per-repo permissions
- Repos can have an owner (-init-repo NAME -owner USERNAME) and
  collaborators (-add-collaborator USERNAME -repo-name NAME), stored
  as git config. Unowned repos (including all pre-existing ones)
  stay open to any authenticated user - no breaking change.
- Push attempts by anyone else get 403, checked at both ref
  advertisement and the actual push.

Registration is now open (/register, no login required) - safe now
specifically because per-repo permissions exist to contain what a
self-registered account can actually touch.

Verified against a real server throughout: git clone, git push,
owner push succeeds, non-owner push blocked (403), collaborator
grant works live without restart, legacy unowned repos unaffected,
duplicate username rejected, bcrypt hash format confirmed in
users.txt.