Dynamic workflow engine in C#