Linguist used to run by shelling out. This meant that each run a new ruby VM was spun up, and the result was read and interpreted. This had a couple of downsides;
- Each time the ruby VM started it had to require Rugged, which is slow
- Colours needed to be loaded, which at times broke and prevented Gitaly from booting
This MR moves the operation to the sidecar, and also uses the linguist caching mechanism to speed up the RPC.