Add MP_OBJ_TYPE(o) accessor.

Should not be overused, but when needed, it's needed.
rt_is_true(): Start with testing for (expected) boolean values.
Add rt_resolve_method() which doesn't throw exception if method not found.

Unlike previosuly existing rt_load_method().
Refactor exception objects to have better impl of Python-side interface.

This implements internal args tuple of arguments, while still keeping
object useful for reporting C-side errors.

Further elaboration is needed.
type->print(): Distinguish str() and repr() variety by passing extra param.
Implement str() and repr() builtin functions.
Add "buffer management" and "shrink" API calls to vstr.

vstr is initially intended to deal with arbitrary-length strings. By
providing a bit lower-level API calls, it will be also useful to deal
with arbitrary-length I/O buffers (the difference from strings is that
buffers are filled from "outside", via I/O).

Another issue, especially aggravated by I/O buffer use, is alloc size
vs actual size length. If allocated 1Mb for buffer, but actually
read 1 byte, we don't want to keep rest of 1Mb be locked by this I/O
result, but rather return it to heap ASAP ("shrink" buffer before passing
it to qstr_from_str_take()).
Add generic impl of stream .readall() method. Use one for unix io.FileIO.