fix: retry garden connection when server is unavailable at startup
When the garden process starts and cannot obtain a token (e.g. server
not yet ready), it now starts with an unconnected socket and schedules
reconnection with backoff, instead of returning :ignore which left
the garden permanently stranded.
Token resolution functions now return {:ok, token}/{:error, reason}
tuples instead of token/nil, so failures propagate clearly through
build_connect_config and do_connect.
sow-158
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>