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).
unicode: String API is const byte*.

We still have that char vs byte dichotomy, but majority of string operations
now use byte.
unicode: Add trivial implementation of unichar_charlen().
objstr: Refactor to work with char pointers instead of indexes.

In preparation for unicode support.
Add __assert_func

* issue #692
Add __assert_func only if DEBUG=1
Make __assert_func weak
Merge pull request #693 from iabdalkader/assert

Add __assert_func
parsenum: Signedness issues.

char can be signedness, and using signedness types is dangerous - it can
lead to negative offsets when doing table lookups. We apparently should just
ban char usage.
stmhal: Update and improve LCD driver.

Still some method names to iron out, and funtionality to add, but this
will do for the first, basic version.
stmhal: Fix file print methods to use print instead of printf.

Also make stdout_print_strn static (ultimately this function needs to be
merged with stdout_tx_strn).
stmhal: Fix type signatures on functions that take variable args.
stmhal: Add Python function to set UART for REPL.

This adds a hook to get/set pyb_uart_global_debug from Python, using
pyb.repl_uart().  You can set it to an arbitrary UART object, and then
the REPL (in and out) is repeated on this UART object (as well as on USB
CDC).

Ultimately, this will be replaced with a proper Pythonic interface to
set sys.stdin and sys.stdout.
Fix problem with ADC reads and multiple channels
stmhal: Toggle LED using ODR ^= pin_mask.