BUG: optimize: if line search fails, don't update position

Fix bugs in routines updating the current function value by what was
returned by a failed line search.
BUG: optimize: make _minimize_newtoncg use wolfe criterion line search

The Wolfe condition should guarantee better properties vs. stagnation.
Note that TNC (almost the same as newtoncg) also uses Wolfe conditions.

Fixes Trac #1778
BUG: optimize: do not use magic numbers in line search initialization

Set the old_old_fval to None, so that the initial step size is 1.0.
(Initialization with the magic number also leads to the same condition,
but it's better to be explicit.)
BUG: optimize/linesearch: _zoom() should indicate a failure if maxiter is reached, rather than returning a step size that doesn't satisfy the conditions
TST: optimize: add test for what happens when line searches fail
BUG: optimize: fix negative curvature search direction in _minimize_newtoncg

When the CG iteration fails on first iteration, the algorithm should
pick the steepest descent direction pk = - c grad(f) with c > 0. There
was a sign error here which made the choice to be pk = + c grad(f),
which caused the line search to always fail.
TST: optimize: add a test case where minimize_newtoncg used to fail
BUG: do not reraise exceptions in integrate, odr, optimize

Change the exception handling inside leastsq etc. callbacks so that the
exception is simply passed outside, rather than doing the C equivalent
of::

    try:
        result = func(args)
    except Exception as e:
        print(e)
        raise minpack.error("blah blah " + func.__name__)

The advantage is that the exception type is preserved, stdout is not
polluted with printed warnings.

This also fixes a crash on Python 3 in all of these locations.
BUG: partial fix to bug 1042, lets sparse.multiply work with vector array (e.g. array.shape = (6,)).
ENH: Added scalar multiplication to spmatrix.multiply method.
DOC: added docs for my previous commits.
ENH: Increase parity with numpy.multiply, sparse.multiply now broadcasts row vectors and scalars like numpy.array.
ENH: io/matlab: avoid one data copy in writing zlib compressed data
ENH: io/matlab: avoid keeping data copies in memory in GenericStream
ENH: io/matlab: avoid making copies of zlib compressed data when loading files
MAINT: integrate: fix a couple typos in the 'quad' function: one in the docstring, and one in an error message
DOC: io/matlab: update comments in code
TST: io/matlab: make structarr benchmark runnable + check with compression
DOC: odr: improve ODR documentation
MAINT: io/matlab: add a benchmark for memory usage