Repo commits

Added repo commits.
TODO:
- [x] Can you also add a cli tests that does the flow
- [x] Remove test TODO
- [ ] Test existing repo migration
- [ ] DictionaryThriftStorage store should return an Id, not a path
- [ ] Two increment functions, for either side of the Commit.
- [ ] Investigate if it should use the latest id, or the current one.
- [ ] Is it racing to write the commit?

Just writing a note based off our conversation. Could you do the following?
  * Change `storage.store` to just return a `DictionaryId`
  * Create something like `Metadata.incrementCommitDictionary` and `Metadata.incrementCommitFeatureStore`.
  * Do you need to get the latest `FeatureStoreId` or can you use the previous commit's `FeatureStoreId`

/cc @charleso