.NET state machine written in C# supporting most UML 2 features