Encapsulated MetaData members. Added helper functions for common tasks.

Yes it should be creation time, the initial code was modifying that. I verified on my local machine that the ext4 filesystem will update the status time if something is added to a directory or if the file contents change (thus the "changed by writing" in the stat manpage). Based on this information, I will update `MetaData::UpdateLastModifiedTime()` so that it also updates the status time. Since windows has no equivalent, this will not change the behavior in Windows (but will correctly map changes in Windows to Linux st_ctime timestamps).

As for `.second`, I know whats going on now roughly. There are two objects representing a directory, a `Directory` object in `DirectoryHandler` and a `File` object listed as a child in another `Directory` object. This function is returning both the `Directory` and the `File` - which no longer makes sense because they have the same base class. Currently, the timestamps have to be updated in the `File` object because `GetContext` grabs that particular instance instead of the `Directory` object in the `DirectoryHandler` (the path being retrieved could be a directory or file). Calling `ScheduleForStoring()` on the `File` class shouldn't be needed because that function simply calls `ScheduleForStoring()` on its parent, which would be the directory whose `AddChild()` function is also being invoked. I will test this a bit later to make sure its being stored without the call.

I think we still have much to clean up!