[build] Staged setup for building assemblies with cyclic dependencies

This patch introduces an infrastructure to stage the builds for the core
assemblies that have cyclic dependencies.   This deals directly with
the following cycle:

    System.dll requires:
	System.Configuration.dll
	Mono.Security.dll
	System.Xml.dll

	They all require System.dll to be built

    System.Xml requires:
	System.dll
	System.Configuration.dll

    System.Security.dll requires:
	System.dll
	Mono.Security.dll
	System.Xml.dll

Principle
=========

The patch works by directing the build infrastructure to place
intermediate build steps on their own directory.  For example the
first System.dll build that only takes a dependency in mscorlib.dll is
placed not under the final directory but on a subdirectory called
"bare".

The second time that System.dll is built (after Mono.Security and
System.Xml have been built) is placed on the "secxml" directory.

The third time is the final build, and that one ends in the profile
directory.

The same principle is applied to System.Xml.

Better Dependency Tracking
==========================

To handle the multiple stages, the new Makefiles for the various
parties involved in this loop are now able to build their
dependencies.  This means that typing "make" on System.Security or
System.Xml or System will build all of the intermediate steps as
required, without needing the toplevel Makefile to perform multiple
build shots to incrementally build the result.

Bug fixes
=========

We must have regressed at some point the build of System.Xml as we
were only doing one build of it, one without System.Configuration
support.  This patch introduces back the changes to build System.Xml
in two steps.

This patch fixes the setup where we end up rebuilding System.dll and
overwriting it two times as the build progresses as a side effect
(this is what required LIBRARY_USE_INTERMEDIATE_FILE).

Details
=======

library.make:

	Introduces a new "the_libdir_base" which is the raw directory
	where the final output will go.   This points to the same location
	that libdir_base previously pointed to.

	The existing libdir_base is modified to contain an optional
	"intermediate" directory, where intermediate builds can be
	placed.

Other cycles
============

The System.Design assembly was listed as having cycles, but while this
cycle exists in theory, in practice we have not implemented any of the
code that brings the cycle in System.Windows.Forms.Design's
ImageListImageEditor and chances are, we wont any time soon.
[System.Core] Add explicit cycle dependency tracking to System.Core

This patch is a continuation of the previous work on System to remove
the multi-stage build configuration in Mono's class libraries and avoid
the overwriting of assemblies in a multi-stage build setup.
Use LOCAL_MCS_FLAGS to prepend the directories
Drop the extra separator
[build] Prevent cyclic targets from being built in parallel

Since we are invoking make recursively to satisfy the dependencies
for any of the cyclic components, we need to inform make to not try
to parallelize any work on any of the cyclic dependencies, otherwise
multiple builds will execute building the same binary, and the result
will be truncated outputs.

For example, System's Makefile would launch all the parallel builds for
the dependencies:

        $(secxml_libdir)/System.dll             \
        $(the_libdir_base)System.Xml.dll        \
        $(the_libdir_base)Mono.Security.dll     \
        $(bare_libdir)/System.dll

They could be launched in parallel, and in turn the makefiles on those
directories might try simultaneously to invoke recursively a component
that has not been built yet.

So we use .NOTPARALLEL to flag all the cyclic dependencies on a given
directory to instruct make to not run those in parallel.
[build] Drop most uses of LIBRARY_USE_INTERMEDIATE_FILE, clean debug targets
[build] Untangle the System.Web build, just like System and System.Core
Last of the cycles is gone
Adjust the path for Mono.Security
[MS.Build] for item metadata access expression, remove surrounding ' and ".

The test case would explain what is not desired there.
[MS.Build] for item metadata access expression, remove surrounding ' and ".

The test case would explain what is not desired there.
[monodoc] removed erroneous instance of 'FOO' string.
[MWF] Implement multi-display support on Linux (Fixes #325669)

The number of displays and sizes can be retrieved with the help of
libXinerama. The implementation was done in a way that is backwards
compatible, so on non-Linux systems or when libXinerama is not
available the behavior will be the same as before.

Also fixed the implementation of FormStartPosition.CenterScreen to
bring up the form centered on the current display (with the current
display being either the screen the top left corner of the owner
form is on, or if there is no owner the screen that has the mouse
pointer). This fixes Novell bug #325669 on Linux
(https://bugzilla.novell.com/show_bug.cgi?id=325669).
[MWF] Fix Screen.FromRectangle (#8271)

The Screen.FromRectangle method was too simple minded.  It did not try to
find the best match for a screen when the system has more than one screen.
The new implementation makes at least some effort to find the closest
screen with the most overlap with the rectangle.
[MWF] Fix ComboBox list to not display offscreen (#15462)

The fix mimics the behavior of Windows/.NET.
Merge pull request #943 from ermshiperete/bug-novell-325669

[MWF] Implement multi-display support on Linux (Fixes #325669)
Merge pull request #1039 from joelmartinez/master

[monodoc] removed erroneous instance of 'FOO' string.
[MS.Build] now ITaskItem impl. in BuildEngine4 behaves consistent with MS.Build.Tasks.

To be precise, now the implementation returns ItemSpec for ToString().
WriteLinesIntoFile task writes ITaskItem[] lines into a file, without calling
ItemSpec.
Maybe it is better to fix Tasks.dll but I'm unsure about xbuild compatibility.

This missing ToString() override caused target framework monikor output
to become invalid source file (i.e. it used to write ItemSpec as code(!) but
this ITaskItem impl. in BuildEngine4 just wrote its type name as .ToString()
result).
Merge pull request #1041 from mono/staged-cyclic-builds

This patch introduces an infrastructure to stage the builds for the core
assemblies that have cyclic dependencies.   This deals directly with
the following cycle:

    System.dll requires:
	System.Configuration.dll
	Mono.Security.dll
	System.Xml.dll

	They all require System.dll to be built

    System.Xml requires:
	System.dll
	System.Configuration.dll

    System.Security.dll requires:
	System.dll
	Mono.Security.dll
	System.Xml.dll

Principle
=========

The patch works by directing the build infrastructure to place
intermediate build steps on their own directory.  For example the
first System.dll build that only takes a dependency in mscorlib.dll is
placed not under the final directory but on a subdirectory called
"bare".

The second time that System.dll is built (after Mono.Security and
System.Xml have been built) is placed on the "secxml" directory.

The third time is the final build, and that one ends in the profile
directory.

The same principle is applied to System.Xml.

Better Dependency Tracking
==========================

To handle the multiple stages, the new Makefiles for the various
parties involved in this loop are now able to build their
dependencies.  This means that typing "make" on System.Security or
System.Xml or System will build all of the intermediate steps as
required, without needing the toplevel Makefile to perform multiple
build shots to incrementally build the result.

Bug fixes
=========

We must have regressed at some point the build of System.Xml as we
were only doing one build of it, one without System.Configuration
support.  This patch introduces back the changes to build System.Xml
in two steps.

This patch fixes the setup where we end up rebuilding System.dll and
overwriting it two times as the build progresses as a side effect
(this is what required LIBRARY_USE_INTERMEDIATE_FILE).

Details
=======

library.make:

	Introduces a new "the_libdir_base" which is the raw directory
	where the final output will go.   This points to the same location
	that libdir_base previously pointed to.

	The existing libdir_base is modified to contain an optional
	"intermediate" directory, where intermediate builds can be
	placed.
[corlib] Fix ClaimsIdentity default ctor.