kwargs for open() and _io.FileIO()

This provides more CPython compatibility but is mainly done in work towards a fix for #874: the mode kwarg is fully implemented, and the encoding arg is allowed so now the tests can specify `encoding='utf-8'` which makes sure CPython uses the correct encoding for opening the files instead of the encoding derived from some environment variable.
I'm not sure name "FILE_OPEN_ARGS" name conveys well the fact that it's actually number of args. Grepping for mp_arg_val_t, I see that there's a pattern of having "_NUM_ARGS" suffix for such defines.