Hierarchical finite state machine library for .NET supporting most of the UML 2 state machine semantics