Cache objectcode in pkgimages
1. Handle external functions in other images
When we find an edge to an external function (already cached in an
loaded pkgimage), we emit a global variable which we will patch during
loading with the address of the function to call.
2. Split `.ji` and `.so`
Validation headers and srctext goes into `.ji`, data and objectcode
goes into .so.
3. Implement Base.Linking using lld to link on user machines
On MacOS we are not gurantueed to have a usable `-lSystem` we can
link against, so we use `-undefined dynamic_lookup`
Co-authored-by: Mosè Giordano <giordano@users.noreply.github.com>