tests: test for dnet_recovery with --dump-file option was added

Это тест восстановления с опцией `--dump-file`.

Я сделал в отдельном файле, чтобы можно было посмотреть на изменения, которые затронут все тесты восстановления, чтобы запускать их двумя способами:

1. когда тесты сами записывают для себя данные;
1. когда тесты принимают файлы, в которые указаны, какие данные были записаны (для тестов на большом объеме данных).

Тесты можно запустить (подробности в **conftest.py** или `py.test --help`, находясь в `tests/unstable/`):

1)

    PYTHONPATH=./ py.test -v -s \
    --node=s16h.xxx.yandex.net:1025:1 \
    --node=s16h.xxx.yandex.net:1026:1 \
    --node=s16h.xxx.yandex.net:1027:1 \
    --node=s17h.xxx.yandex.net:1025:2 \
    --node=s17h.xxx.yandex.net:1026:2 \
    --node=s17h.xxx.yandex.net:1027:2 \
    --node=s18h.xxx.yandex.net:1025:3 \
    --node=s18h.xxx.yandex.net:1026:3 \
    --node=s18h.xxx.yandex.net:1027:3 \
    --good-files-number=70 \
    --bad-files-number=100 \
    --broken-files-number=50 \
    --files-size=102400 \
    tests/unstable/

2)

    PYTHONPATH=./ py.test -v -s \
    --node=s16h.xxx.yandex.net:1025:1 \
    --node=s16h.xxx.yandex.net:1026:1 \
    --node=s16h.xxx.yandex.net:1027:1 \
    --node=s17h.xxx.yandex.net:1025:2 \
    --node=s17h.xxx.yandex.net:1026:2 \
    --node=s17h.xxx.yandex.net:1027:2 \
    --node=s18h.xxx.yandex.net:1025:3 \
    --node=s18h.xxx.yandex.net:1026:3 \
    --node=s18h.xxx.yandex.net:1027:3 \
    --good-keys-path=./good_keys \
    --bad-keys-path=./bad_keys \
    --broken-keys-path=./broken_keys \
    tests/unstable/

Сейчас предполагаю слить эти изменения в **develop** и сделать активным билд тестирования на реальном кластере (это возможно, так как этот тест в отдельном файле).
И после этого приступлю к изменению остальных тестов восстановления, допиливанию запускатора, чтобы он мог работать с реальными машинками.

reviewers: @uvizhe, @shaitan

Человеческих? Тут написано, что я утверждаю, что "ключ k должен быть равен hash'у sha1 от данных" (то условие, которые мы закладывали для наших тестов). Даже сообщения от AssertionError не нужно, чтобы сказать, что если здесь падает, то данные не такие, какие должны быть.

В AssertionError будет написано, что ожидал A, но получил B.

В тестах используются matcher'ы для проверок - зачем в этом месте делать обычный `assert`?
В будущем, когда добавятся **user_flags** и **timestamp** будет использоваться наш matcher, с нашими сообщения, но даже сейчас как по мне - вполне понятно.