Enable distributed jobs based on VPN

As we concluded from here: device-management-service#325 (closed)

We will, firstly, enable distributed jobs in a manual way in which we let SP deploy multiple jobs, one at once, and after all of them are deployed, the program (the job) handles the orchestration as Horovod is doing.

Also, this issue is specifically for distributed jobs based on VPN in which the peers communicate through a private IP range so that we can bind the container's ports.

Workflow example:

SP -> deploys Horovod node1 (sending VPN's routing table) as a normal job

    Selected CP-1 -> enters VPN based on the routing table, starts container (the Horovod node will wait for the other nodes)

SP -> deploys Horovod node2 (sending VPN's routing table) as a normal job

    Selected CP-2 -> enters VPN based on the routing table, starts container (the Horovod node will wait for the other nodes)

SP -> deploys Horovod node3 (sending VPN's routing table) as a normal job

    Selected CP-3 -> enters VPN based on the routing table, starts container (the Horovod node will wait for the other nodes)

This is not the ideal but it's the fastest without messing up with all the process in NuNet. The ideal way involves changes on the smart contract which we don't want to deal now.

Note: We can finalize this issue automatizing the deployment and sending all the jobs at once but changes on the smart contract is not on the scope of this issue!

Edited by Joao Castro