DOCUMENTATION: Create a json format for representing scene information

While I could have used xml here, I personally like json over xml because it's a
little less verbose and therefore, easier to read at a glance. That said, the lack
of verbosity can mean it's challenging for a newcomer to know what each
field is supposed to be. I added quite a few comments as well as a json schema
in order to help overcome this potential confusion.
COMMON: Create a class for caching models

This reduces the memory load if an artist didn't explicitly using instancing,
but rather, just put a couple copies of the model into the scene.
COMMON: Remove unused light value
JSON_CPP: Add a function for returning the value as a Single

So the compiler stops complaining about double -> single conversions everywhere
COMMON: Add static_cast to remove compiler warnings
OBJ_LOADER_DEMO: Fix typo in shader
COMMON: Add constructors for the light structs
OBJ_LOADER_DEMO: Add support for loading custom scenes

as defined in scene.json
COMMON: Add static_cast to remove compiler cast warnings
COMMON: Create a class to allow allocating on 16 byte boundaries

to pass to std container classes. This is needed for XMMATRIX and XMVECTOR
OBJ_LOADER_DEMO: Ensure all std containers holding XMMATRIX/XMVECTOR use 16 byte alignment
OBJ_LOADER_DEMO: Remove code setting null state changes

According to presentations at GDC 2013/2014 and SIGGRAPH, this
is unnessessary and actually adds overhead since the driver still has to
validate null.
OBJ_LOADER_DEMO: Remove redundant type
COMMON: Use native file I/O instead of fstream

It's faster
COMMON: Create a class to hold the logic concerning a shader
COMMON: Let the input layout be default nullptr

We were already pretty much doing this
OBJ_LOADER_DEMO: Use the new shader classes

This removes a lot of redundant code