Why splitting the data into the training and testing set is not enough I know that in order to access the performance of the classifier I have to split the data into training/test set. But reading this: 

When evaluating different settings (“hyperparameters”) for estimators,
  such as the C setting that must be manually set for an SVM, there is
  still a risk of overfitting on the test set because the parameters can
  be tweaked until the estimator performs optimally. This way, knowledge
  about the test set can “leak” into the model and evaluation metrics no
  longer report on generalization performance. To solve this problem,
  yet another part of the dataset can be held out as a so-called
  “validation set”: training proceeds on the training set, after which
  evaluation is done on the validation set, and when the experiment
  seems to be successful, final evaluation can be done on the test set.

I see that another (third) validation set is introduced which is justified by overfitting of the test set during the hyperparameters tuning.
The problem is that I can not understand how this overfitting can appear and therefore can not understand the justification of the third set.
 A: During model building you train your models on a training sample. Note that that you can train different models (i.e. different techniques like SVM, LDA, Random Forest, ... or the same technique with different values of the tuning parameters, or a mixture). 
Among all different models that you trained, you have to choose one and therefore you use the validation sample to find the one with the smallest error on the test sample.
For this 'final' model we still have to estimate the error and therefore we use the test sample. 
A: Even though you are training models exclusively on the training data, you are optimizing hyperparameters (e.g. $C$ for an SVM) based on the test set. As such, your estimate of performance can be optimistic, because you are essentially reporting best-case results. As some on this site have already mentioned, optimization is the root of all evil in statistics.
Performance estimates should always be done on completely independent data. If you are optimizing some aspect based on test data, then your test data is no longer independent and you would need a validation set.
Another way to deal with this is via nested cross-validation, which consists of two cross-validation procedures wrapped around eachother. The inner cross-validation is used in tuning (to estimate the performance of a given set of hyperparameters, which is optimized) and the outer cross-validation estimates generalization performance of the entire machine learning pipeline (i.e., optimizing hyperparameters + training the final model).
A: I think it's easiest to think of things this way.  There are two things that cross validation is used for, tuning the hyper parameters of a model/algorithm, and evaluating the performance of a model/algorithm.
Consider the first use as part of the actual training of the algorithm.  For instance cross validating to determine regularization strength for a GLM is part of establishing the final result of the GLM.  This use is typically called internal cross validation.  Because (hyper)parameters are still being set, the tuning set loss is not a great measure of the actual algorithms performance.
The second use of cross validation is using data that was held out of the entire process which produced the model, to test its predictive power.  This process is called external cross validation.  
Note that internal validation may have been part of the process which produced the model so in many cases both internal and external cross validation are necessary.
A: Cross-validation does not completely overcome the over-fitting problem in model selection, it just reduces it. The cross validation error depends on the data set you use. The smaller the data set, the higher would be the cross validation error. 
Additionally, if you have high degrees of freedom in model selection, then there is a danger of the model performing poorly, as the cross validation criterion gets overfitted.
So, when the data is divided into 2 sets, a.k.a the training and testing sets, the splitting is done statically. So, there is a chance of overfitting the training set. However, the cross validation sets are created through different methods, like the k-fold cross validation, Leave-out-one-cross-validation(LOOCV), etc which helps ensure that the exact fit reward of the 2-set split is eliminated and thus the chance of over fit is reduced.
These are some resources which would help you understand better.
So, cross validation would help you when you have a bigger data set, rather than a smaller one.
