Core: Add GC.SuppressFinalize to control Dispose methods

With the Dispose pattern, it isn't necessary for the garbage collector to call the object's finalizer, since Dispose handles the releasing of acquired resources. This is also recommended practice.