refactor: list.elems is an argument checking base.ielem wrapper.

Functions in std.base are for internal use, and so all callers
have already validated arguments, so we shouldn't waste time
rechecking types on every call to base.elems.
Also this means list.elems can be strict about only accepting
List objects, and catch accidental table passing earlier.
* lib/std/base.lua (elems): Move from here...
(ielems): ...to here, and remove argument checking.  Adjust
export table.
* lib/std/list.lua (elems): Re-export base.ielems when we are not
argchecking, otherwise check types and call base.ielems when
successful.
* lib/std/debug.lua (tabify): Use non-argchecked base.ielems.
* lib/std/list.lua (concat, depair, filter, foldl, map)
(map_with): Likewise.
* lib/std/set.lua (Set._init): Likewise.
* lib/std/table.lua (merge_namedfields): Likewise.
* lib/std/tree.lua (Tree.__index): Likewise.
* specs/functional_spec.yaml (fold): Use List objects
consistently.
* specs/list_spec.yaml (elems): Adjust error message
expectations.

Signed-off-by: Gary V. Vaughan <gary@gnu.org>