Add a `data` field to foreign objects.

This is just a strong reference to an arbitrary Scheme object. It
can be set by the user with |foreign-data-set!| and queried with
|foreign-data|.

The original purpose of this modification is to enable automatic
management of the lifecycle of C structs and unions, in a way
more similar to how it's done for garden variety Scheme objects.

In particular, this makes it possible to obtain zero-copy
references to fields of a C struct or union, guaranteeing that
the containing structure will not be reclaimed as long as a
reference to the contained structure is reachable.  I have
considered other solutions for this problem, but I couldn't
any that would provide this guarantee while allowing the user
to treat references to C structs as regular first class
objects.

Other likely uses of this field would be:
- to express other similar lifecycle dependencies amongst
  foreign (and Scheme) objects, and
- to attach metadata to them.

If it is judged that these uses don't warrant the cost of one
extra pointer for every foreign object, a specialized subtype
of foreign objects could be created, so this cost would not be
incurred unnecessarily.  In principle, I don't think the
savings in this variant would warrant the added complication
to the codebase and to the overall design, but I may be
underestimating the costs involved.
Ignore vim swap files.