Big Commit - Adds a ton of functional operations
Big Commit - Adds a ton of functional operations

Adds functional operations (does not mutate object) to JsonObject

Includes:
Negate: Gets a copy of the object with all the numbers' signs flipped
Multiply: Multiply two JsonObjects. Assumes the left is a vector
(Contains string:float pairs) and the other is a matrix (Contains
string:vector pairs). Returns the result 'vector' object
MultiplyRow: Used for the above function, performs the vector times row
calculation, and returns a single number.

AddNumbers: Adds two JsonObjects together as if they are 'vectors' as
string:float pairs. Returns the resultant 'vector'.

CombineRatios: Combines two JsonObjects together, assuming they are
holding numbers in the range [0, 1]. Each paired number is combined
using the formula:
(1 - (1-a)*(1-b))
.5 and .5 become .75

Also adds a number of functions:
JsonObject JsonObject.Mask(IEnumerable<string>)
JsonObject JsonObject.Mask(IEnumerable<JsonString>)
both return a subset of a JsonObject's key:value pairs, only including
keys contained within the parameter.

Adds T JsonObject.Get<T>(string) which attempts to retrieve and reflect
out a T from the JsonObject. (by calling Json.GetValue() )

Json.GetValue<T> is re-worked so that JsonObjects and JsonArrays become
themselves if requested as a JsonObject or JsonArray

JsonObject.Extract<T> is reworked so that its defaultValue parameter is
default(T) by default. (Thats a lot of defualts)

ninjapretzel/XtoJSON