Remove unnecessary bounds check from mp_seq_get_fast_slice_indexes.

At this point, start will be >= 0, so checking if stop < 0 is redundant with
checking if start > stop a few lines later.
Merge pull request #675 from Rosuav/seq_simplify

Remove unnecessary bounds check from mp_seq_get_fast_slice_indexes.
py: Implement __contains__ special method.
stmhal, file: Implement a,x,+ open modes, seek and tell.

Also now returns correct POSIX errno when an IO operation fails.

Addresses issues #516 and #676.
stmhal, file: Seek to end of file if opened in 'a' mode.
objfun: Factor out mp_setup_code_state() function to set up code_state object.

It needs to be reused for generator functions, too.
objgenerator: First iteration of refactor to use mp_setup_code_state().
objgenerator: Finish refactor to use mp_setup_code_state().
tests: Add testcases for "complicated" args to generator functions.
objfun: Remove no longer used mp_obj_fun_prepare_simple_args().
py: Fix static defn in qstr; include mpconfigport.h with "" (not <>).
py: Make 3 functions static.
py: Rename builtin "io" to "_io".

Functionality we provide in builtin io module is fairly minimal. Some
code, including CPython stdlib, depends on more functionality. So, there's
a choice to either implement it in C, or move it _io, and let implement other
functionality in Python. 2nd choice is pursued. This setup matches CPython
too (_io is builtin, io is Python-level).
py: Revert change of include, "" back to <> for mpconfigport.h.
gc: Use byte* pointers instead of void* for pointer arithmetic

void* is of unknown size
stream: Use mp_obj_is_true() for EOF testing.

Getting a length of string may be expensive, depending on the underlying
implementation.
Merge branch 'gc-pointers' of github.com:stinos/micropython into stinos-gc-pointers
py, gc: Revert ret_ptr to void*, casting to byte* for memset.
Merge branch 'stinos-gc-pointers'
objstr: Be 8-bit clean even for repr().

This will allow roughly the same behavior as Python3 for non-ASCII strings,
for example, print("<phrase in non-Latin script>".split()) will print list
of words, not weird hex dump (like Python2 behaves). (Of course, that it
will print list of words, if there're "words" in that phrase at all, separated
by ASCII-compatible whitespace; that surely won't apply to every human
language in existence).