C# State pattern with context and concrete states