typechecker: split function bodies into named and unnamed

Summary: The naming pass is currently rather odious architecturally.
 While pulling out the set of declarations, we're also calculating
 terminality and identifying special functions. But we're not doing
 any local inference, so all of that effort is happening in the wrong
 place.

 The first step, in this diff, is to introduce an ast node for a
 function body that consist of either a named block (currently
 everything, eventually only lambdas), or an unnamed block (currently
 nothing, eventually everything but lambdas).

Reviewed By: @jwatzman

Differential Revision: D1660732

Signature: t1:1660732:1415214964:d7bdae0e42155a2153a6847b42fc4c5e0fce111d