Fix c-declaration-limits to return correct limits in all cases.
This function is the guts of c-indent-defun and c-mark-function.
In particular, when c-defun-tactic is nil, return a correct value rather than
always nil, and when it's 'go-outward, go through an intricate algorithm to
determine the requisite narrowing before the "top-level" defuns go to work.
* lisp/progmodes/cc-cmds.el (c-narrow-to-most-enclosing-decl-block): Enhance
to take additional optional parameter LEVEL, saying how many enclosing levels
of decl-block to narrow to.
(c-declaration-limits): Introduce algorithm to determine narrowing. Use
c-where-wrt-to-brace-block to determine whether to go back to BOD to determine
lower bound.