block: change name resolution logic.

    - instead of accumulating the dictionary of all names visible at a given
      point (allnames()), check the name by going from block to parent block,
      looking the name in each block;

    - provide "lookup" and "bound" functions. This is to allow blocks different
      implementations of environments;

    - fix allnames(): instead of following parent chain, follow block chain.
fix keyword recognition.

Previous code mistakenly parsed "ordinal" as "or" (a keyword) followed by
"dinal" (an identifier). Fix this by first recognizing a longest identifier and
then checkong it for a possible keyword.
walk(): fix wrong call-back argument list.
add proarkhe.

Define the universally ambient block "proarkhe" containing predefined
identifiers.