Staged cyclic builds

Properly stages the build of C# class libraries so that we never generate libraries on top of each other (right now we brute force the build and overwrite multiple libraries when we do cyclic builds)