1) Why should I even provide "addr_recv services" field? And does it matter if I provide 0 or 1?
I don't think it matters.
2) Will receiving node reject "addr_recv IP address" field if it is 127.0.0.1 instead of its own IP or a false IP?
It shouldn't, but you should still attempt to provide the correct IP.
3) "addr_trans services" Why am I telling this again if it is identical to "services" above?
Because....
4) I don't get usage of "nonce" when I have already provided "timestamp" which will change every time it is generated and it will be bigger. And can I use the same thing again here?
A random nonce which can help a node detect a connection to itself. If the nonce is 0, the nonce field is ignored. If the nonce is anything else, a node should terminate the connection on receipt of a version message with a nonce it previously sent.
Just use 0.
5) What is the criteria to get banned by a node? For instance will I be banned if I send a wrong message on first attempt? Also will I receive any reply if my message contains errors or will it be ignored?
You won't get banned on the first time that you try. Just don't send bad messages too many times too quickly and you should be fine.
You should test this against your own local node and you can set it to never ban the node that you are testing.
You should use wireshark to see the messages actually sent by nodes so that you can check your own message and see how the messages are usually done.