Pull bound detection out into model building step so that sparse matrix isn't needed for all non-linear solvers