Encapsulated MetaData members. Added helper functions for common tasks.

Something like:
```c++
void set_directory_id(const DirectoryId& new_id) { 
    assert(directory_id_ != nullptr);
    *directory_id_ = new_id; 
}
```
? Should the setter automatically allocate too? Ultimately we have to figure out a way to get this into `class Directory` and `class File`...