Merge pull request #725 from armgong/master

add a method Initialize an empty DataFrame using PooledDataArray
use functions instead of symbols for by and colwise
introduces aggregate to separate functionality from colwise and by

The two previous usages of `by` where two distinct operations.
One intended usage is to apply a function to all SubDataFrames
and it is a shortcut for `map(df -> colwise(f, df), groupby(...))`.
The second usage is to create summary statistic by groups of columns,
similarly to Pandas aggregate. The second functionality was split of
into its own separate function: `aggregate`

Example usage:

using DataFrames; using RDatasets; iris = dataset("datasets", "iris");

aggregate(iris, :Species, mean)
by(iris, :Species, df -> DataFrame(
	colwise(mean, df[1:4]),
	[symbol("$(cn)_mean") for cn in names(df)[1:4]]))

aggregate(iris, :Species, [mean, var])
by(iris, :Species) do subdf
	cols = subdf[1:4]
	means = colwise(mean, cols)
	variances = colwise(var, cols)
	header = [symbol("$(cn)_$(fn)") for cn in names(cols), fn in [:mean, :var]][:]
	DataFrame([means; variances], header)
end
deprecates the symbol form of by
adds test for _fnames and changes tests of colwise to aggregate
adds documentation for aggregate and block from of by
fixes bug in colwise([f], df) not returning array of array
Merge pull request #726 from vchuravy/vc/colwise

[RFC] Refactor parts of by and colwise into a new function: aggregate