Huge commit: new clio_link function allowing external binary exutable
endpoints.

This is a large commit; it touched many things in a way that was hard
to encapsulate. The overall view is that I have added a first pass at
a clio_link function, which allows a user to attach an arbitrary
binary executable to a route. Within this executable, the user has a
slightly different contract to recover the clio_endpoint_t structure,
namely they must use the new function clio_endpoint_recover on the
first (non-name) argument passed to their executable.

Under the hood am doing the following. The fk_key_t structure now has
a union called val that is either a string (the fully qualified name
of the executable associated with the key) or a generic function
pointer. The fn_key_t also keeps track of an int value (set and
checked against a new enum denoting executabl (EX) or function
(FN). After some thought, decided to simply double the various getter
and setter functions to take this into account; this touched a lot of
things.

The clio_link function is then similar to clio_route except that it
sets a different kind of fn_key_t. (Also fixed a memory leak in
clio_route while making these changes.)

Within the endpoint setup of the forked process, did a pretty large
refactor so as to set up the endpoint object and decide if we are
calling a function endpoint or an executable early on, and to remove a
lot of duolicated code freeing and checking NULL conditions, etc.

If we call the executable (through execv), we first set up a named,
shared memory region (/clio.pid), map it, and then copy the endpoint
struct and its internals there. To facilitate this, had to add the
various string lengths to the endpoint structure. Then we build an arg
list and exec; the user's function gets the name of the shared region.

In the recover function, then, we do the reverse process, namely using
the passed region path and using it to copy out the various data from
the mapped region.

Lots TODO, and maybe there's a leak, but it's a first pass and this
commit message it waaaaay to long now.
Update clio_endpoint_exit to take new external endpoint into account.

If being called from external endpoint, destroy the endpoing structure
and die.