Variant

Added a Variant template in variant.hpp which will be used for implementing JSON and possibly reimplementing NBT going forward.
JSON

Added JSON parsing and serialization functionality in the JSON namespace in json.hpp.

Heavily leverages new Variant template.
Makefile Improvements

Pushed the mkdir boilerplate into a macro.