Please explain what kind of a closure a block in Slate can behave as, and what other concepts the closure rests on (or is it primitive). Does it depend on the context of execution?