Add support to automatically compute identifier in the following object models:
Directory, Release, Revision, Snapshot.
If the identifier is not provided as parameter, it will be computed when the model
is initialized.
This is useful when writing tests and one wants to populate the archive using models
instead of raw dicts.
For instance, if we have the following directory entry model:
```lang=python
dir_target = ...
dir_entry = DirectoryEntry(name=b'directory', type='dir',
target=dir_target,
perms=DentryPerms.directory)
```
To create a valid Directory model, previously you had to proceed like this:
```lang=python
dir_id = hash_to_bytes(directory_identifier({
'entries': [dir_entry.to_dict()]
}))
dir = Directory(id=dir_id, entries=[dir_entry])
```
While after applying that diff, you can now simply write:
```lang=python
dir = Directory(entries=[dir_entry])
```
Depends on D2373