Memcpy: copy words
Optimize memcpy more
py: Load strings as objects when compiling viper.

Eventually, viper wants to be able to use raw pointers to strings and
arrays for efficient access.  But for now, let's just load strings as a
Python object so they can be used as normal.  This will anyway be
compatible with eventual intended viper behaviour.

Addresses issue #857.
Merge branch 'memcpy' of github.com:iabdalkader/micropython into iabdalkader-memcpy
stmhal: Slightly improved memcpy; memset uses word store when aligned.
Merge branch 'iabdalkader-memcpy'
py: Implement divmod, % and proper // for floating point.

Tested and working on unix and pyboard.
py: Fix build error when float disabled; add test for divmod.
py: Move definition of mp_sys_exit to core.

sys.exit always raises SystemExit so doesn't need a special
implementation for each port.  If C exit() is really needed, use the
standard os._exit function.

Also initialise mp_sys_path and mp_sys_argv in teensy port.
py: Make asm_arm_less_op take destination register as first arg.

This gets ARM native emitter working againg and addresses issue #858.
stmhal/hal/src/stm32f4xx_hal_sd.c: fix SDHC card capacity
stmhal/sdcard.c: add pyb.SD.write
stmhal: Change 64-bit arithmetic to 32-bit for SD card block addressing.

By measuring SD card addresses in blocks and not bytes, one can get away
with using 32-bit numbers.

This patch also uses proper atomic lock/unlock around SD card
read/write, adds SD.info() function, and gives error code for failed
read/writes.
py: Make dict use a bit less RAM when iterating; properly del values.

Heap RAM was being allocated to print dicts and do some other types of
iterating.  Now these iterations use 1 word of state on the stack.

Deleting elements from a dict was not allowing the value to be reclaimed
by the GC.  This is now fixed.
py: Add native json printing using existing print framework.

Also add start of ujson module with dumps implemented.  Enabled in unix
and stmhal ports.  Test passes on both.
py: Add 'builtins' module.
lib: Add basic README.
stmhal: Fix bugs in documentation so it compiles.
Add Timer support (PWM, OC, IC) for stmhal and teensy
stmhal: Add pulse_width_ratio to timer channel object.

This allows to set the pulse width (for PWM mode) as a ratio relative to
the period of the timer.  Eg, 0.5 is a 50% duty cycle.  You can set the
ratio in the channel init, or using channel.pulse_width_ratio; the
latter can also read the pulse width as a ratio.