Where does Mono fit in all this?
We're sharing more and more code with .NET Core now so there's convergence happening but there are still pieces that are unique to us.
Disclaimer: I'm working on Mono for Xamarin/Microsoft.
Mono used to have it's own C# compiler in addition to the runtime, but since the official C# compiler is open source, well-engineered and cross-platform compatible, it now uses the same compiler as other runtimes.
Xamarin is based on mono, and Unity ships Mono as their .NET runtime. Mono supports the most platforms out of all .NET implementations, including all current and previous generation gaming consoles.