[FLINK-1040] Make type() call in projections optional (or remove it)

The original version of projection requires a type() to specify the types of output dataset, e.g., dataset.project(0).type(string.class)). Now, I implement a new interface projection() which does not require the type() call, i.e., dataset.projection(0). Similarly, I modify the operation of JoinOperator and CrossOperator. In particular, some changes in ProjectorOperator.java, JoinOperator.java and CrossOperator.java are generated by TupleGenerator.java.

I add more testing cases here. In addition, I rewrite a new example of web log analysis by the projection() API.
Here, I just wanna check whether it makes sense if we do not specify "Tuple1<String>" for "filterDocs". However, there are errors when it meets "with" as user-defined functions usually need to know "TupleX" to process the dataset. For example, if we specify DataSet<Tuple> joinDocsRanks, it would be a error in "joinDocsRanks.coGroup(filterVisits)....with(new AntiJoinVisits())". I would like to revert it to the commented block.