Fix railgun multi call functionality

The main issue with things being broken was because the calling
convention was not defaulting to "stdapi" and hence the call would
fail. Adding the default fixed it.

While fixing this, I brought the mulit-call functionality up to speed
with the error message functionality, so the calls all return the
properly formatted error message.

A small amount of code "cleaning" was done at the same time
(with the main goal of removing `goto` statements).

This is the Meterpreter side to https://github.com/rapid7/metasploit-framework/pull/2458

Sample run:

    meterpreter > irb
    [*] Starting IRB shell
    [*] The 'client' variable holds the meterpreter client
    >> client.railgun.add_function('kernel32', 'DeleteFileA', 'BOOL', [['PCHAR', 'lpFileName', 'in']])
    => #<Rex::Post::Meterpreter::Extensions::Stdapi::Railgun::DLLFunction:0x007feb10014638 @return_type="BOOL", @params=[["PCHAR", "lpFileName", "in"]], @windows_name="DeleteFileA", @calling_conv="stdcall">
    >> f = []
    => []
    >> f << ['kernel32', 'DeleteFileA', ['C:\foo.txt']]
    => [["kernel32", "DeleteFileA", ["C:\\foo.txt"]]]
    >> f << ['user32', 'MessageBoxA', [0, 'foo', 'bar', 'MB_OK']]
    => [["kernel32", "DeleteFileA", ["C:\\foo.txt"]], ["user32", "MessageBoxA", [0, "foo", "bar", "MB_OK"]]]
    >> client.railgun.multi(f)
    => [{"GetLastError"=>2, "ErrorMessage"=>"The system cannot find the file specified.", "return"=>false}, {"GetLastError"=>0, "ErrorMessage"=>"The operation completed successfully.", "return"=>1}]