spec/test: use fakefs
context: add Context class

* add constructor
* add move() method
context: spec: add spec for Context class
config: add Config class

* add constructor
* add load_from_environment_variables()
* add load_default_value()
config: spec: add spec for Config class
base_repository: add BaseRepository class

* add constructor
base_repository: add BaseRepository.is_version()

* to check given text is version string
base_repository: add test for BaseRepository.is_version()
base_repository: add checkout()
base_repository: add get_commit_id()
base_repository: add load_snippet_json()
base_repository: add create_cache(), is_cached?()
git_repository: add GitRepository class
base_repository: test: add test for BaseRepository
spec/test: use json
tag: make public instance members (path, repo)
tag: rename has_repo() => has_repo?()
social_snippet: add SocialSnippet class

* add constructor
* add resolve_snippet_path()
* add find_repository()
social_snippet: spec: add spec for SocialSnippet class
Merge branch 'wip/snippet-path'