The most ideal solution for anonymity on the public block chain is not Zerocash (Zerocoin) nor CoinJoin (current Darkcoin) for detailed reasons I won't fully summarize in this post.
And the most ideal solution for anonymity of your IP address (i.e. your connection to the internet) is not Tor nor a VPN nor I2P/Darknet (Anoncoin), which are often honeypots and you don't know when they are or not.
To be anonymous, you need both underlined types of anonymity.
The latter can be obtained in some cases with a unregistered mobile device or WiFi access, but this isn't readily available to everyone, the governments are trying to eliminate these options, and if you reuse them you are eventually correlated. There is a more ideal solution to the latter that doesn't require these.
Well one could make an argument that Zerocash (not Zerocoin) doesn't require the latter, because it hides even the amount of the transaction, but still the government can compel you to give up your password if they know you are sending transactions. Zerocash has other weaknesses which I think are unacceptable, e.g. if the setup was hacked you have no way to know if the coin suppy is being increased more than allowed and thus the money supply is always unknown and the 8.7ms (115 transactions per second) verification speed per i7 core means it might not scale well for micro payments. One thousand i7 cpu cores would be required to process 100,000 transactions per second, not including denial-of-service attacks transaction spam. That would probably force centralization of mining.