This PR starts to develop the dplyr "interface", i.e. the set of generics that you need to provide methods for if you want to extend dplyr to work with new data frame subclasses. It also uses those methods (along with a count_regroups()) to ensure that the existing grouped_df implementations are not needlessly regrouping data.
Fixes#4086 because count() can now use dplyr_reconstruct() to restore the original class
Fixes#4051 because I've carefully documented the return value of the major verbs
Fixes#4711 since implementing with_groups() is now easy.