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: 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.
MAINT: typo "is uses"
DOC: HACKING: Trac is gone
DOC: remove more references to Trac
ENH: Refactored this method as suggested by @pv.
ENH: Changed multiply to return dense matrix when multiplied with single element list or tuple. Raise value error when trying to multiply to sparse matrices that are the same size.
Added test to .multiply for scalar multiplication and lists.
BUG: Fix Issue #2422, including a test.

It turns out that _end is an undocumented global symbol, maybe in the C++
standard library which has a value of 0.

Declaring it as static is enough to avoid the problem.
Use `const` instead, so that the compiler can optimize the constant variable.
Merge pull request #2425 from Jorge-C/master

BUG: weave: Fix in weave.blitz