Common memory leaks in .NET – GC, delegate events, and weak references