proto: Add LimitError as a structured error
When Gitaly enforces a limit, either due rate limiting or concurrency limiting, it needs to be able to return an error to its clients to provide context into why it failed so that clients can then inform its callers of why the call failed.
See !4469 (merged) for more context.
Changelog: added
Edited by John Cai