block: scheduler: add sio scheduler

Simple I/O scheduler aims to keep minimum overhead to achieve low latency to serve I/O requests. No priority quesues concepts, but only basic merging. Sio is a mix between noop & deadline. No reordering or sorting of requests.

Advantages:

   1.  Simple, so reliable.
   2.  Minimized starvation of requests.

Disadvantages:

   1. Slow random-read speeds on flash drives, compared to other schedulers.
   2. Sequential-read speeds on flash drives also not so good.
block: scheduler: add sioplus scheduler

The Simple I/O scheduler is an extremely simple scheduler, based on noop and deadline, that relies on deadlines to ensure fairness. The algorithm does not do any sorting but basic merging, trying to keep a minimum overhead. It is aimed mainly for aleatory access devices (eg: flash devices). The plus version fixes writes_starved not being initialized on startup and also modifies the write starvation counting logic.
block: scheduler: add v(r) scheduler

Unlike other schedulers, synchronous and asynchronous requests are not treated separately, instead a deadline is imposed for fairness. The next request to be served is based on it's distance from last request.

Advantages:

   1. May be best for benchmarking because at the peak of it's 'form' VR performs best.

Disadvantages:

   1. Performance fluctuation results in below-average performance at times.
   2. Least reliable/most unstable.