Better build scripts on Windows and Linux

**This isn't finished yet but here for discussion etc**

## Aim

Building on Windows is currently a pain in the ass, as has been pointed out by lots of people! Nothing we're doing requires anything except the Windows SDK (7.1) to build, or VS2010 or VS2012.

The aim here is to get a one-command build that will produce usable binaries from a fresh clone of the repository.

## Actually running build

###Prerequisites

- git on path
- svn on path
- .NET Framework v4+ installed (on Windows)
- Windows platform SDK with compilers (v7.1) or Visual C++ installed (on Windows)
- gcc installed (on Linux)
- patched mono installed (on Linux)

###Windows

From a command prompt or powershell:

- `psake.cmd Build-Quick` - fails if V8 and JS1 aren't available (for local builds)
- `psake.cmd Build-Incremental` - will build V8 if necessary, JS1 if necessary, Event Store always (for CI)
- `psake.cmd Build-Full` - cleans and builds everything (for nightlies and releases)

Optional parameters (passed in the -parameters @{} hash):

- `platform` - x86 or x64 (defaults to x64)
- `configuration` - release or debug (defaults to release)
- `version` - the semantic version number to give to the release (used only in the release pipeline, CI and nightlies default to 0.0.0.0 but still have the branch/commit hash embedded in them).
- `platformToolset` - C++ toolset to use - v110, v100, WindowsSDK7.1 (defaults to latest we can guess at, see below)
- `forceNetwork` - true if you want to force the script to get dependencies even if Windows thinks theres no network connection (otherwise we don't try to avoid sometimes lengthy delays).

###Linux

```bash
./build.sh <mode> <version> <platform> <configuration>
```

- `mode` is one of `quick`, `incremental` or `full` (see definitions above)
- `version` is the semantic version to apply
- `platform` - either x86 or x64 (defaults to x64)
- `configuration` - either debug or release (defaults to release)

## Tasks

- [x] Get V8 and it's dependencies
- [x] Clean but retaining the V8 and dependency clones (it's big)
- [x] Build V8 & JS1 - VS2012
- [x] Build V8 & JS1 - VS2010
- [x] Build V8 & JS1 - Windows SDK
- [x] Build V8 & JS1 - Various common combinations of these - needs more testing
- [x] JS1 versioning
- [x] Generate AssemblyInfo during build with correct commit info
- [x] Build Event Store
- [x] Debug/Release Configurations
- [x] x64/Win32 Platforms
- [x] Override of platform toolsets
- [x] One-command clean and full build
- [x] One-command incremental build

## C++ Fun

Detecting which platform toolset for Visual C++ is available is non-trivial, it involves interrogating system directories. See the function in native-code.ps1. Currently we DON'T support V120 toolset (from VS2013 preview) - let's worry about that when 2013 isn't a preview any more.