Add saveout to function arguments

This allows python callers to optionally save variables
returned from functions on the MATLAB side. This improves
performance as large objects do not need to be
serialized so frequently.

In combination with changes to run_code and run_script
it allows more performant execution of line-by-line
MATLAB from python
Fix run_func to actually call the function
Optionally capture stdout

Add capture_stdout to constructor. Passing False
allows one to see display() etc messages
Add logging

Add log to constructor arguments which shows which
functions are called, and what their arguments are
Add a path cache

Because run_code, run_script, and run_function all
manipulate the MATLAB path add a local python
path cache to reduce the number of addpath calls
Remove weakref

* It didnt actually work with functions with
  multiple arguments
* Log function proxy creation
Fix run_func to add the path
Run_code in the base workspace

* So we can get to the variables created within
Pass and return args as dictionaries

Due to the inherent ambiguity in matlab's JSON
decoding ability this is the only way to make
passing >1 same-sized array arguments work. Otherwise
the matlab json library coerces them to a matrix
Add run_script

Runs a m script file and stores any variables
in the base workspace
Rework run_code

Write a temporary m file and execute it via run_script to
allows variables to persist in the base workspace.
Add examples of recent functionality