Add large-gauge cable item and jumper cable vpart.
Finite state machine, get.

Two possible states at the moment: attach_first and pay_out_cable.

In the first state (also the default), you get asked for the first
vehicle to attach the cable to. In the second state, the cable keeps
track of the remaining length of cable in the spool you've activated,
and updates the count of charges to suit.

There is currently no checking for the cable reaching zero length (it
will be removed when this happens), and no way to attach the second
vehicle. But it kind of works, and you can drop the cable and save/load
and it'll still keep track of what its first connection is.
Make the cable disconnect when you get too far.

I tried having it work the other way (the loose end falls out of your
hands), but that came with too many corner cases. This'll do.
Give cable spools special active processing.

Adds a JSON flag, "CABLE_SPOOL", marking them for special processing.
Technically, someone could later add shorter, or longer cables.
Add a method to fetch vehicle-relative coordinates

Also reindents map::veh_at, which the new method is based on.
Add a helper to reset a cable.

Also cleans up some of the syntax around, and lets process_cable
potentially return true to have itself removed (not used, though).
Finish the cable item attachment system.

Upon attaching to both "source" and "target" vehicles, create the
appropriate vparts on both, pointing their targets at the other
vehicle's absolute coordinates.
Add UNMOUNT_ON_MOVE for vparts.

Also fixes some corner cases for cables not noticing they've lost their
connected end.
Let the player disconnect a half-connected cable.

Also fixes the problem wherein a cable would re-spool itself and then
immediately unwind again. Oops.
Remove unneeded argument from shed_loose_parts
Save the new vehicle_part target field.

And load it when we load the game. Silly dummy Narc.
Alternators generate, and power cables send power.

Note that this makes alternators always consume the full amount of
engine power they can. This is almost always such a small amount that it
shouldn't be noticeable, but it *is* a little bit of extra fuel over
time.
Power cables drain power (from remote vehicles)

Also, removed some debug stuff. This seems to be working now.
Fixes floodlights, fridges and recharging stations.

These were not possible to turn off if there was no charge in the battery. By default, this doesn't happen as they would just get turned off when the battery ran out, but once #9374 is merged, this can happen on a receiving vehicle.
Use string_format instead of std::to_string.
Just use veh_at in veh_part_coordinates.

Totally failed to notice that it would return me the part number. Durr.
When one vehicle sheds its vpart, target does, too

The item cable still counts as connected to the other vehicle, but this
was exactly the "half-connected" state, wherein no vpart existed on the
first vehicle.

Removing the vpart by veh_interact does the same.
Removing a cable doesn't need tools.
Shed loose vehicle parts when dragged away.
Reset cable when it changes Z-level.