Improved the CPos, CVec, WAngle, WPos, WRange, WRot and WVec structs by implementing IEquatable<T> which means unboxing costs can be eliminated.

Also simplified the ToString method by concatenating components directly rather than using a format string since the overhead is a bit high for simple cases like this.
Changed MiniYaml.NodesDict property into a method since it was non-trivial. Cached a few invocations into locals which should prevent some redundant evaluation.
Minor tweaks that touched a lot of files:

 - Made many private methods static where possible (runtime can elide checking the object for null).
 - Declared attribute classes as sealed (allows the reflection to work faster).
 - Moved some static cctor's into field initializers.
 - Removed some unused parameters.
Mitigated some culture issues by specifying cultures to use in various string related methods, as well as comparison methods.
Fixed classes implementing and using the Dispose pattern. Fixed several implementations to either seal the classes or provide a standard protected virtual Dispose(bool). Removed some finalizers that were not required. Added using blocks in a couple of places were local resources were not being released.
Changed abstract Widget ctor into a protected static method to avoid calling the virtual AddChild method from the base ctor.
Bag of minor changes:

- Removed some unused parameters in several methods.
- Added Serializable attribute to a few serializable classes.
- Used as keyword instead of is plus a cast in a few places.
- Added missing STAThread attribute to OpenRA.CrashDialog. Also passes args through to Arguments.
- Improved Exts.Random by checking for ICollection, which means we can avoid copying the input since we know the length.
- Made Exts.Bounds work on Image since this is a base class and it can apply to more things.
- Changed ActorInfo.PrerequisitesOf to generate a sequence rather than materializing a list.
- Adjusted WorldRenderer.GenerateRenderables to avoid materializing the list of actors since it can simply consume the sequence later.
- On startup, restore the current directory to be that of the executable since much of the IO implicitly relies on it. Useful for using analysis tools of the program which may start it with a current directory of something else.
- A few other minor tweaks to streaamline some methods.
Some minor performance tweaks to scape off maybe a percent of two from profiling:

- In FrozenUnderFog/FrozenActor, materialize the footprint since it's not trivial, doesn't need much memory and is evaluated a lot.
- Cache some dictionary lookups that were being repeated often enough to be noticeable.
- In Mobile.CanEnterCell, be even lazier with generating the list of blocking actors, since it was previously always creating a list even if the list was ignored. Also lift out an invariant in a filter that means that filter need not be applied at all in some cases.
Code formatting pass - convert a few spaces indents to tabs, etc.
Implemented IEquatable<T> on Actor, so comparisons can be done a bit faster.
Add a missing null check in ReplayRecorderConnection.Dispose.
Fixed TraitDictionary.Contains to use Any() rather than Count() != 0 which means it can bail early if a match is found.
Changed removeActorPosition field into ActorMap into a set since it was queried via Contains when actors needed to be removed.
Added MinBy, MaxBy, MinByOrDefault and MaxByOrDefault methods and replaced calls of the style OrderBy[Descending]().First[OrDefault]() which is not as performant.
Changed some new Lazy<T>() calls to use the Exts.Lazy wrapper instead.
Changed WorldUtils.TilesByDistance to be an array of arrays rather than an array of lists since it is created only once and never altered - the lists are just overhead.
Took some measures to reduce allocation the main game loop, mainly by rewriting some LINQ calls as loops to remove the allocation overhead from delegates. This will hopefully reduce GC pressure during the main loop since currently a fair portion of time is being spent in GC.
Added a few more missing using statements for disposable resources.
Unify settings for solution and project setups.