Performance enhancements for inner_ext() methods

This pull request incorporates a few changes that @robertjharrison suggested to speed up the inner_ext methods:
  * Most importantly, it starts refinement at the initial level instead of at the leaf nodes of the host function
  * It allows the user to request no refinement below the leaf nodes (assuming they know something about the behavior of the provided function functor interface.
  * It now uses the raw threshold instead of truncate_tol(thresh, key)

Note that inner_ext now traverses the tree of the "host" function in redundant form. By default it calls undo_redundant after computing the inner product, but if the user is going to be doing a bunch of inner products (e.g. in the pseudo-potential code) they're going to want to set keep_redundant to true and then manually undo_redundant when they're finished.