Test Front-End Improvement

The test front-end now always runs with errors displayed and all errors reported, regardless of php.ini.
Testing Framework Improvement

Tests now always run with all errors reported, and therefore fail on any error or warning.
File Utilities

Added the File class, which contains static methods for performing various tasks related to the file system, including:

- Writing to files
- Reading from files
- Checking if a file exists
- Getting the last modified date/time of a file
- Deleting files

Also provided 12 unit tests for this class.
JSON Error-Handling Improvements

Improved the error handling in the JSON class:

- Serialization/deserialization errors now result in a unique type of exception -- JSONException -- allowing these errors to be easily differentiated
- Rather than checking return codes from json_encode and json_decode (finnicky due to ambiguity in the return value of json_decode) json_last_error is called after each json_encode/json_decode call, and its return value determines whether an exception is thrown
JSONValidator

Implemented a generic JSON validation mechanism in the form of the JSONValidator class.

When creating an instance of the JSONValidator class it is supplied with a "schema" -- a string or some key/value mapping which identifies the object structure and types that should be present.

The Execute method then takes the result of JSON::Decode and ensures that it conforms to the schema, by either returning true/false, or returning a list of problems, depending on whether detailed output is enabled or not.