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.
Minor documentation fixes.
Minor formatting fixes.
Added indentation support to the logging.
Fixed template names by getting the name from the underlying templated declaration.
Added explicit constraint support to the experimental function templates generation.
Simplified the property generation code.
Check for and ignore decayed types since we cannot handle some cases.
Renamed ASTContext parameter from "lib" to "ctx".
Cleaned up some unused usings.
Cleaned up some diagnostics to debug severity.
Whitespace cleanups.
Removed the explicit #if to make this compile on all platforms.
Added a new pass to check for special macros known to CppSharp that can control binding behavior.
Reworked function template parsing.

The previous version did not handle methods properly and lead to duplicate definitions since it did not check for existing templates with the same signature.
Ignore note diagnostics.
Fixed GetFunctionOverloads to work for all operator kinds.

This indirectly fixes the pass for ambiguity to process property indexers correctly.
Fixed GetFunctionOverloads to work for class operators too.
Removed property accessors ignored checking code.

The logic here is just wrong... first even if one of the accessors is ignored that does not mean we should ignore the whole property. Additionally, the code logic to check if an accessor is ignored is faulty, we can not rely on the return value of the Visit functions, but check if the declaration itself was ignored.