added some list utilities

new primitive procedures:
 * append
 * length
 * apply

 * append (code helper)

behavior modification:
 * NULL.list? now returns true
 * NULL.cons!(x) returns x

bugfixes:
 * primitive procedure: context-probe, now regards the second arg
   correctly.
 * SExpr#append! now regard the tail as either an atom or a list
 * SExpr#tail_node: bugfix while tracing the tail node of a list