IriParsing

**Major changes:**

Added property IriParsing to System/Uri.cs that switches between .NET 4.5 and .NET 4.0 default parsing behavior.
The property value can be initialized from the environment variable MONO_URI_IRIPARSING, and reflection can be used to change the field s_IriParsing.

Created System/UriHelper.cs with methods FormatAbsolute and FormatRelative used to escape, unescape characters, replace backslash, and reduce paths depending on scheme, UriComponent, UriFormat and some flags that can be provided.

Changed  System/Uri.cs and System/UriParser.cs  to use UriHelper.FormatAbsolute and UriHelper.FormatRelative.

Changed System/UriParseComponents.cs to handle IpV6 hosts, Unix/Windows paths.

Added Test/System/StringTester.cs that generates/saves or loads/asserts expected values.

Added Test/System/UriPermutationsTest.cs that generates or asserts the Uri methods and properties output for multiple combinations of scheme (http, https, ...), location (path, fragment, query), encoded and decoded characters (all ASCII, some Unicode), reduce paths.
    
Updated existing tests Test/System/UriTest.cs and Test/System/UriTest2.cs with the IriParsing behavior differences.

Improved UriParseComponents.ParseComponents to check Uri validity and return errors, as well as data other than components as isUnc, isAbsoluteUri, scope_id. 

Refactored Uri.Merge and Uri.ParseNoException to use UriParseComponents.ParseComponents.

If a scheme has a custom registered parser it will now be used.

**To Do**

Add UriPermutationsTest expected values (~15MB) to a server, modify "make check" to download it.
Run tests in other platforms, only tested on Mac.

**Fixes:**
Bug [16960](https://bugzilla.xamarin.com/show_bug.cgi?id=16960)
Bug [8981](https://bugzilla.xamarin.com/show_bug.cgi?id=8981) (requirements)