STEP._interval_difficulty(): Add some asserts to catch fishiness early
ndstep.py: Allow executing the module as a script to run a simple benchmark
ndstep: Call callback only every 100 iterations
ndstep* disp: Fix nonsensical construction
ndstep callback_interval: 100 -> 10*D
ndstep maxiter: Default 100 -> 2000, in sync with ndstep_seq
ndstep: Add no-improvement stopping condition
ndstep main: Perform random restarts
ndstep_minimize(): Fix various niter off-by-one counting bugs
ndstep main: Change maxiters 2000 -> 16000

Still runs in 6s on my notebook and it seems various interesting
behavior already has enough time to demonstrate itself in this setting.
ndstep main: Rethink function optimum position and point0 sampling

Now, point0 is sampled only from the area near zero, to always roughly
halve the interval - this may help kick off the STEP convergence.
But this would always sample quite nearby to the optimum, so enlarge
the optimum inteval from [-1,1] to [-2,2] and at the same time remove
any regularities in dimensions that might bias non-default dimension
selection strategies.
ndstep main: Print info on intermediate solutions
ndstep_minimize(): Make no-improvement stopping configurable with stagiter, bump default from DIM to 10*DIM

10*DIM was determined experimentally on the main routine as the right
tradeoff, yielding best optimums.