cairo: Clean up dispose implementations
cairo: Add mechanism to debug missing Dispose calls

Enabled by setting a new MONO_CAIRO_DEBUG_DISPOSE environment variable.
cairo: Introduce the concept of reference ownership

Also:
  * improving naming consistency
  * obsolete old/broken stuff
  * clean up tabs/space mix

NOTE: this removes the wrapper caches for Pattern and Surface as
there was no reliable way to clear them.

This is a merge from changes in Mono.Cairo in mono 3.2.
cairo: Put some classes in separate files
cairo: Make debug more robust
cairo: Clean up Region's Dispose/ctor
cairo: Use getter methods for returning IDisposables

This makes it a bit clearer that the caller is responsible for
disposing IDisposable objects returned from any method.
cairo: Destroy should suppress finalizer
cairo: Don't log warnings during VM shutdown

Else it can explode pretty badly if the Console streams are
finalized before the Cairo objects.
cairo: Fix some whitespace and code formatting issues
cairo: Fix text API calls

The native functions require a NULL-terminated string of text encoded in
UTF-8.

This change is merged from Mono.Cairo in mono 3.2.
Update Cairo samples for the latest API changes
cairo: Remove superfluous #pragma in Pattern.cs