Somewhere in the Docs I found a pattern that really works for me.

class X: IDisposable {

    ~X() {Dispose();}

    public void Dispose() {
       // release all my resources
      GC.SuppressFinalize(this);    
    }

}

I think this provides the best of several worlds.  If I just want to ignore resources, everything will eventually, if nondeterministically, be cleaned up and it won't leak -- at the cost of every object living for an additional GC.  If resources or performance are an important issue, I can deal with explicit disposal.
 
     The GC provides a backup to disposal using this pattern so it doesn't matter if I miss a couple.  Often the difficuties in explicit disposal are infrequent corner cases.  It may be that even in a performance critical app explicitly disposing only of the 90% of the allocated objects will be enough.

I agree that nonmemory resources have complicated disposal requirements that are difficult to model in general, so I do not think the generalized resource collector is necessary or possible.