py: Fix smallint modulo with negative arguments.

Addresses issue #927.
extmod: Add uheapq module.
py: Clean up edge cases of malloc/realloc/free.
py: Use MP_OBJ_NULL instead of NULL in a few places.
py: Add builtin memoryview object (mostly using array code).
py: Properly free string parse-node; add assertion to gc_free.
stmhal: Use OSError with POSIX error code for HAL errors.

Addresses issue #921.
stream: Add optional 2nd "length" arg to .readinto() - extension to CPython.

While extension to file.readinto() definition of CPython, the additional arg
is similar to what in CPython available in socket.recv_into().
stmhal: Fix pin af definition: TIM2_CH1_ETR -> TIM2_CH1/TIM2_ETR.
stmhal: Use stream's readinto.
py: Use mp_uint_t where appropriate in stream functions.
py: Fix debug-printing of bytecode line numbers.

Also move the raw bytecode printing code from emitglue to mp_bytecode_print.
py: Improve memory usage debugging; better GC AT dumping.

In unix port, mem_info(1) now prints pretty GC alloc table.
USB CDC ACM: populate bFunction{Class,SubClass,Protocol} in the interface association descriptor
stmhal: Fill in USB class/subclass/proto for CDC+HID device.

Also change HID device from keyboard to mouse (should have been mouse
all along).
stmhal: Change fresh boot.py and main.py to use \r\n newlines.

This is so it's compatible with Windows.
unix: Allow -X heapsize= option take numbers with K & M suffixes.

For kilobytes and megabytes respectively.
py: Store bytecode arg names in bytecode (were in own array).

This saves a lot of RAM for 2 reasons:

1. For functions that don't have default values, var args or var kw
args (which is a large number of functions in the general case), the
mp_obj_fun_bc_t type now fits in 1 GC block (previously needed 2 because
of the extra pointer to point to the arg_names array).  So this saves 16
bytes per function (32 bytes on 64-bit machines).

2. Combining separate memory regions generally saves RAM because the
unused bytes at the end of the GC block are saved for 1 of the blocks
(since that block doesn't exist on its own anymore).  So generally this
saves 8 bytes per function.

Tested by importing lots of modules:

- 64-bit Linux gave about an 8% RAM saving for 86k of used RAM.
- pyboard gave about a 6% RAM saving for 31k of used RAM.
py: Compress load-int, load-fast, store-fast, unop, binop bytecodes.

There is a lot potential in compress bytecodes and make more use of the
coding space.  This patch introduces "multi" bytecodes which have their
argument included in the bytecode (by addition).

UNARY_OP and BINARY_OP now no longer take a 1 byte argument for the
opcode.  Rather, the opcode is included in the first byte itself.

LOAD_FAST_[0,1,2] and STORE_FAST_[0,1,2] are removed in favour of their
multi versions, which can take an argument between 0 and 15 inclusive.
The majority of LOAD_FAST/STORE_FAST codes fit in this range and so this
saves a byte for each of these.

LOAD_CONST_SMALL_INT_MULTI is used to load small ints between -16 and 47
inclusive.  Such ints are quite common and now only need 1 byte to
store, and now have much faster decoding.

In all this patch saves about 2% RAM for typically bytecode (1.8% on
64-bit test, 2.5% on pyboard test).  It also reduces the binary size
(because bytecodes are simplified) and doesn't harm performance.
py: mp_builtin___import__(): Add const to arg type.