It is actually fairly difficult to send a transaction with 0 fee now because a lot of wallets protect against it.
The only way I can think of right now is to create the transaction manually in Bitcoin Core with the createrawtransaction RPC command. However this method is complicated as it is essentially building the transaction by hand.
To do this, open up Bitcoin Core and go to Help > Debug Window > Console. In the textbox at the bottom, type the following:
createrawtransaction '[{"txid":"<id>","vout":<n>}]' '{"<address>":<amount>}'
<id> is the transaction id of the output you would like to spend. <n> is the output index of the output you would like to spend. <address> is the address you want to send to and <amount> is the amount you want to send to that address.
To have more inputs, put a comma (,) next to the right curly brace for the txid and vout. Then copy the
{"txid":"<id>","vout":<n>} and change the <id> and <n> to match the output you want to spend from.
To add more outputs, put a comma (,) next to the <amount> and copy the entire
"<address>":<amount> and set the address you want to send Bitcoin to and the amount you want to send.
To send with 0 fee, you must make sure that the total of the outputs you spend from matches the total of the amounts you spend to. If you do not, the difference becomes the transaction fee; this method does not automatically create change addresses.
Once the transaction is created, you will get an output of a hex string. Sign the transaction with
where <hex> is the hex string. This only works if you have the private keys to the address you are spending from in Bitcoin Core. You will get another hex string as output.
Broadcast the transaction by doing
where <hex> is the hex string.
Then you are done.
If you need help, you can ask me and I can give you a more detailed explanation and an example. I can help you with creating the transaction itself as well.
My Bitcoin address is in my profile.