Dependency injection in Xvc

Almost all Xvc functions receive a channel in the form

fn cmd_api(output_snd: Sender<XvcOutputLine>, ...)

Functions use this to send messages to user.

XvcOutputLine is an enum in the form:

pub enum XvcOutputLine {
    /// The output that we should be reporting
    /// For informational messages the user doesn't usually follow
    /// Warnings that are against some usual workflows
    /// Errors that interrupts a workflow but may be recoverable
    /// Panics that interrupts the workflow and ends the program
    /// Note that this doesn't call panic! automatically
    /// Progress bar ticks.
    /// Self::Info is also used for Tick(1)

When a commands wants to send a text to the outside world or wants to increment a counter, it uses this enum.

Currently, all these outputs are written to the console. In the future, when other output channels (like web etc.) are created, these functions will return their output there.