Improvements to the world generation editor.

Summary:
This diff brings significant improvements to the world generation editor; in particular:

* Performance generation is re-enabled, with usability improvements to display a toolbar icon to start performance measurements (rather than performing them all the time).
* All of the rendering and performance measurement uses the new threaded task pipelines.  This results in a significant improvement in stability and reliablity as a large number of threading issues have been eliminated.
* Improvements to the usability of the flow graph interface, in particular:
  * Connections can be made from outputs to inputs.
  * Checks are performed to make sure that a connection is permitted (prevents crashes when flow elements with different input / output types are connected).
  * Right-clicking now cancels making a connection.
  * Right-clicking on an element now causes it to be selected before the context menu is opened.
* A status of "Generating..." or "Performance testing..." is now shown underneath elements when they are being processed in the pipeline.

There are also various other miscellanous changes which were dependencies of the improvements:

* The IoC module search now uses assemblies that start with `Tychaia` instead of `Tychaia.`.  The world generation editor is called `TychaiaWorldGenEditorAlgorithm`, so this wasn't being picked up the IoC module load.
* Addition of a clamping algorithm.  The clamping algorithm allows you to specify upper and lower bounds on the input values and to clamp them between a range.
* Fix for the perlin noise `GetColorForValue` implementation so that it doesn't crash when passed values that are out of the expected bounds (this can occur when child layers use it for rendering).
* Addition of `ICurrentWorldSeedProvider`.  This is an IoC interface that allows the world generation editor to specify a seed and have it propagate to areas where storage layers (that have no seed information) are converted to runtime or compiled layers.  Currently the world generation editor still hardcodes the seed value (it's now set to `0xDEADBEEF`), but this allows for the value to be exposed on the interface in future with relative ease.
* Improvements to the threaded and non-threaded task pipelines inside `Tychaia.Threading`.  This allows delegation of input connection to be done until a later point, which is a requirement when pipelines are used inside IoC loaded classes (since it is not possible to determine when the IoC class will be first created, nor what thread that will occur on).  Thus the task pipelines now have `InputConnect`, `InputDisconnect`, `OutputConnect` and `OutputDisconnect` methods instead.
* Support for layers with 3 inputs inside the `RuntimeLayer` implementation.  This allows `AlgorithmBiomes` to be used.
* `StorageAccess`; the class used to convert a `StorageLayer` into the runtime or compiled equivalents will now automatically copy the seed across when converting a runtime layer into a compiler layer.

Test Plan:
Play around with algorithms in the world generation editor.  In particular, the world generation editor shouldn't crash or misbehave when connecting incompatible algorithms, nor when performance calculations are being run.  Generally test all areas affected by the changes listed above.

It's important to have this change reviewed and actioned ASAP, as the large number of changes mean that it may be difficult to re-integrate if further changes are made on the `master` branch before this is merged in.

Reviewers: Sabre070

Reviewed By: Sabre070

Maniphest Tasks: T49

Differential Revision: http://code.redpointsoftware.com.au/D49