Allow set tool used as shell

This is very useful for me to set `PowerShell` as tool to run commands with.

There are new setting `shell` which is used to define command. This setting can contain `$cmd` variable, which is replaced with command after all decorations (adding prefix etc.). If `shell` is string, then after replacing `$cmd` it will be used as shell command. If `shell` is list, then it is interpreted as program with arguments, where arguments can contain `$cmd` and one of arguments can be `$input` (in this case input will be passed as arg, not via stdin). I've added `$stdin` because I failed to invoke `powershell` reading stdin.

Another feature is vars allowed in command input^
* `$file` will be replaced with view file name
* `$path` with full file name
* `$dir` with view file directory

Here's my settings i'm using with this branch:

    {
        "shell": ["powershell", "-Command", "& { $cmd }", "$input"]
    }