HeuristicLab has a very sophisticated implementation that is both fast. For example in an independent benchmark you can see that the speed of HeuristicLab's interpreter was equal to a newly coded minimalistic C++ interpreter that included optimizations. It is also very flexible in that you can configure the grammar that creates your tree in the GUI environment. So you can create functions that should e.g. only have certain variables as inputs, but not all. The implementation is based on a long heritage of code, that is very actively developed and which is reviewed before each release to ensure the continued quality. HeuristicLab supports Regression, Classification, as well as custom problems like Santa Fe trail or Lawn Mower (of which a tutorial exists that helps you implement your own custom problem). There is crossvalidation, there is a separation of training, validation and test that you can make use of to detect overfitting. You will get as results how much each variable is present in the whole population, how much your symbols are present in the population so you can estimate what variables are important. This is displayed as a graph over time. There's also a pareto analyzer that you can enable to show all solutions by quality and complexity. HeuristicLab also contains the recently (GECCO2012) emerging GP benchmark library to enable people to test and compare results. Apart from GP there are further regression and classification algorithms implemented like SVM, Random Forests, k-NN, etc.
It's implemented in C# and runs on .Net 4 (currently only on windows, mono support is close to finish).