Use a tuple to represent the C function signature

Replace use of a list to pass arguments to a call with a tuple. Parsing
the elements in the external term format is less error prone. A list, in
the term format, can be:

* a string (a char buf)
* a list header followed by terms, terminated with an empty list
* a list header followed by 1 element, followed by a list header ...,
  terminated by an empty list

Since the calls take a fixed number of arguments (none of the vararg
versions are used), a tuple might be a better erlang representation.
It also fits in better with the usage of tuples in other functional
languages, where a tuple can hold any types but a list contains the
same type.

        alcove:call(Port, fork, []) -> fork()

        alcove:call(Port, exit, [1]) -> exit(1)

        alcove:call(Port, execvp, ["/bin/echo", ["/bin/echo",
                "foobar"]]) -> execvp("/bin/echo", argv)

        alcove:call(Drv, open, ["/tmp/foo", 0, 0]) ->
                open("/tmp/foo", 0, 0)

Would become:

        alcove:call(Port, fork, {}) -> fork()

        alcove:call(Port, exit, {1}) -> exit(1)

        alcove:call(Port, execvp, {"/bin/echo", ["/bin/echo",
                "foobar"]}) -> execvp("/bin/echo", argv)

        alcove:call(Drv, open, {"/tmp/foo", 0, 0}) ->
                open("/tmp/foo", 0, 0)

However that exposes the caller to the dreaded single element tuple.

Simplify the C port code by converting the argument list to a tuple.