Extractor & SangerUniversal applications refactoring + DataPreparationApplication

Посмотреть пример рефакторинга можно в `ExtractorApplication`. Кратко, на примере `ExtractorApplication`:
1. В `lib-run` сздаем модуль `yextract`. Ему в зависимости прописываем `ylib-run-core` - там базовые трейты `Job`, `Configuration`, `ConfigurationValidator` и StreamManager'ы
2. `yextractor` прописываем в `ylab-runner`
3. В `yextractor` создаем `package ru.biocad.run.yextractor`
4. Переносим из `Application` код валидации конфига в имплементацию трейта `ConfigurationValidator` - `ExtractorConfigurationValidator`, и case class конфига кладем рядом. В `Application` замиксуем `ExtractorConfigurationValidator`
5. Создаем `ExtractorJob`, имплементируя трейт `Job` и используя менеджеры ввода-вывода. В `YReader` добавил нужные implicit-конверсии и методы `asText`/`asBinary`, поэтому правок в коде не должно быть слишком много. Нужно лишь выпилить явные обращения к `java.io.File`. Также я написал `LabeledStreamWriter` на замену `LabeledWriter`. Последний можно удалить, как только все его клиенты будут отрефакторены.
6. Итого, из Application вырезается валидация конфига (в `ExtractorConfigurationValidator`), сам конфиг, а метод `run` занимает 5 строчек, из которых 4 - создание и закрытие менеджеров ввода-вывода. Их можно создавать самостоятельно, а можно воспользоваться билдером для файлового ввода-вывода.
7. Не забываем про тест `ExtractorJobTest`.

Приложение `Extract` я протестировал и покрыл тестом, `SangerUniversal` лишь переписал (завтра напишу тест), но не запускал, а в `DataPreparation` набросал основной костяк приложения, осталось лишь дописать `Job` (там можно посмотреть как легко пайплайнятся тулы, но логика еще не реализована до конца)