Xaxis label cuts off bugfix

Please check carefully this one as this is my first pull request ever in github. Please let me know of any improvements/problems - I'll be glad to fix it.
The issue: https://github.com/oxyplot/oxyplot/issues/185 

I haven't found a suitable method for rotating the bounding box, so I wrote it myself.
MeasureText now accepts `double angle = 0`, that controls the angle of text measured. 

I have also added an example of other issue mentioned in the ticket. It is quite near the original issue, but the code responsible for it in in the other place, I yet haven't looked at that. 

Tests are green, everything except Xamarin compiles - I wasn't able to compile Xamarin because of license, asked a question in gitter. ~~But it should work as the change in xamarin is very simple.~~ I will use buildserver to check that for now
here is an idea how it could be implemented (not tested or optimized, possibly some bugs here...)
``` csharp
        /// <summary>
        /// Calculates the bounds with respect to rotation angle and horizontal/vertical alignment.
        /// </summary>
        /// <param name="bounds">The size of the object to calculate bounds for.</param>
        /// <param name="angle">The rotation angle (degrees).</param>
        /// <param name="horizontalAlignment">The horizontal alignment.</param>
        /// <param name="verticalAlignment">The vertical alignment.</param>
        /// <returns>A minimum bounding rectangle.</returns>
        public static OxyRect GetBounds(this OxySize bounds, double angle, HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment)
        {
            if (angle == 0)
            {
                return new OxyRect(0, 0, bounds.Width, bounds.Height);
            }

            var u = horizontalAlignment == HorizontalAlignment.Left ? 0 : horizontalAlignment == HorizontalAlignment.Center ? 0.5 : 1;
            var v = verticalAlignment == VerticalAlignment.Top ? 0 : verticalAlignment == VerticalAlignment.Middle ? 0.5 : 1;

            var origin = new ScreenVector(u * bounds.Width, v * bounds.Height);

            // the corners of the rectangle
            var p0 = new ScreenVector(0, 0) - origin;
            var p1 = new ScreenVector(bounds.Width, 0) - origin;
            var p2 = new ScreenVector(bounds.Width, bounds.Height) - origin;
            var p3 = new ScreenVector(0, bounds.Height) - origin;

            var theta = angle * Math.PI / 180.0;
            var costh = Math.Cos(theta);
            var sinth = Math.Sin(theta);
            Func<ScreenVector, ScreenVector> rotate = p => new ScreenVector(costh * p.X - sinth * p.Y, sinth * p.X + costh * p.Y);

            var q0 = rotate(p0);
            var q1 = rotate(p1);
            var q2 = rotate(p2);
            var q3 = rotate(p3);

            var x = Math.Min(Math.Min(q0.X, q1.X), Math.Min(q2.X, q3.X));
            var y = Math.Min(Math.Min(q0.Y, q1.Y), Math.Min(q2.Y, q3.Y));
            var w = Math.Max(Math.Max(q0.X - x, q1.X - x), Math.Max(q2.X - x, q3.X - x));
            var h = Math.Max(Math.Max(q0.Y - y, q1.Y - y), Math.Max(q2.Y - y, q3.Y - y));

            return new OxyRect(x, y, w, h);
        }
```