Where are types allocated in .NET and why people get it so wrong