Reworked the way we generate constructors and destructors to always use the actual class name.

Fixes some problems that might happen with method declarations with names that don't match the their containing class.
Fixed a problem with class operators not being correctly promoted to class operators.

We need to check all the parameters for a possible class to promote the operators.