Introduce Mono.Cairo to 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.

Conflicts:
	mcs/class/Mono.Cairo/Mono.Cairo/Context.cs
[Mono.Cairo] Put some classes in separate files
Mono.Cairo: Fix rectangles returned by StrokeExtents and FillExtents

The third and fourth parameters of the Rectangle constructor are width
and height, but cairo_stroke_extents and cairo_fill_extents give right
and bottom coordinates.

Signed-off-by: Bertrand Lorentz <bertrand.lorentz@gmail.com>

Conflicts:
	mcs/class/Mono.Cairo/Mono.Cairo/Context.cs
Mono.Cairo: Fix names of native functions used in PSSurface

It seems cairo_ps_surface_begin_* functions never existed, they were
always named cairo_ps_surface_dsc_begin_*.

Conflicts:
	mcs/class/Mono.Cairo/Mono.Cairo/PSSurface.cs
Mono.Cairo: Re-order a few native methods and update API index URL
Mono.Cairo: Add Region class for cairo_region_* API added in cairo 1.10

The Region type is needed for new API introduced by GDK 3.0.

This requires cairo 1.10 or above.
Make debug more robust
[Mono.Cairo] Clean up Region's Dispose/ctor
[Mono.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.