permstats: new generic function to extract permutation results

Function extracts the observed "statistic" and permutations results
"simulations" from vegan functions returning permutation or simulation
results for the statistic.

Implemented for adonis, anosim, mantel, mrpp, oecosimu,
permutest.cca, protest. The following permutation methods do not
return permutation results: CCorA, envfit (factorfit, vectorfit),
mso, permutest.betadisper.
add summary.permstat modelled after print.oecosimu

Variable names are still missing, but the current output looks like:

> a <- adonis(dune ~ Management+A1, dune.env)
> summary(permstats(a))
     statistic      z    mean    2.5%     50%  97.5%
[1,]    3.0730 4.5511 1.04294 0.42650 0.94986 2.1514
[2,]    2.7676 2.5055 1.05795 0.21888 0.88788 2.7881
Edit NAMESPACE so much that you can use permstats
rename permstats -> permustats: consistent with permutest
also rename the file permstats.R -> permustats.R
dispweights work without 'group' argument
all dispweights return transformed data (with attributes)
dispweight does simulations, not permutations
check that input are integers, fix docs
document that dispweight returns transformed data
dispweight doc says that it is 'nsimul' (not 'nperm')
dispweight used arg 'group', but other vegan functions use 'groups'
remove empty levels from "groups" or dispweight fails cryptically

Error in if (any(means == 0)) { : missing value where TRUE/FALSE needed
major rewrite of dispweight: rethink, streamline & use vegan::nullmodel

The function was completely rewritten to use vegan::nullmodel
"c0_ind" which is equal to the simulation used in the original
function. The original function looped over species, but  now we
perform simulation for all species simultaneously using nullmodel,
and loop over levels of 'groups'. All code that could be moved
out of this loop was moved, and calculation of 'dhat' statistics
was refactored and streamlined -- and done outside the loop.

There are not many unchanged lines, but the results are equal provided
the 'p' values are on the same side of the fixed critical level.

In my laptop, this is also about 3x faster than the original.
default to 999 simulations in dispweight
adapt docs to 999 simulations of commit 67adb96
Expose nullmodel and plimit as user arguments in dispweight
dispweight handles 1-level 'groups': analysis wrt community mean
Relax data requirements in dispweight: reject only binary models

The test of data properties was moved to checking properties of
defined nullmodel, and only binary null models are rejected (these
would all have p=1). We now accept also non-integer quantitative
data. I don't know if these make sense, but that is none of my
business -- users decide.
Introduce generalized (parametric) dispersion weighting

This is a new unpublished method. Original method uses Pearson
Chi-square for a Poisson model with one factor and assesses the
significance using multinomial simulation ("c0_ind" nullmodel).
The new method estimates the same Pearson Chi-square for any glm
model and evaluates the significance parametrically. Otherwise the
models are identical except that the original method ignores
completely the factor levels where species in assessing the number
of degrees of freedom, but the generalized method defines the
degrees of freedom in a standard way (number of observations minus
number of model coefficients). As the degrees of freedom is used as
divisor for weights, this will influence the strength of downweighting.