Configurable argument

To write readable code, current interface for argument is not ideal. Now we start supporting new interface like `api.method({"foo": foo, "bar": bar})`.

To keep backward compatibility, we need to make it configurable. I made an enum to implement it.