Properly handle object cleanup errors

Destructors now fail and there's a finish method returning an error.