app: port the code to the Flow monad
app: break `main` into 3 files (common, entrez)
app: move `demux` code to a separate file
app: move bed-operations to a separate file
Tags: add the `fasta` tag
Gff: add `with sexp` for the error type
app: start the `transform` command
Tags: add function default_extension
Transform: add functions `on_ok` and `on_error`
Transform: add functions to_object and of_object
Tags: draft functions of_string, to_string

For now they are based on S-Expression parsing, but a more convenient
format should be defined.
app: create the `random` subcommand

Right now:
    biocaml random "((gzip fastq) 202)" -o ttt.fastq.gz
will create a FASTQ file with 202 constant records (except their name).
app: add an actual transformation to `transform`

The command
    biocaml transform ttt.fastq.gz -to "fastq"
will parse the gzipped FASTQ file and output another FASTQ
file: `ttt-$(date).fastq`.
app.random: improve output specification parsing

In this sub-command with experiment for now with Genlex, and
concatenate all anonymous arguments into the specification:
    biocaml random -items 4 fastq without N with read length = random 23 42
app.random: clean-up code
Bed: fix “bug” in printing transform
app.random: draft "bed" format support
app.demux: use for_concurrent_with_index, fix #63
app: use Flow.with_out_channel
app.entrez: update to Flow API changes