Roll apply nonfloat dtypes
Fixed issue [#4964](https://github.com/pydata/pandas/issues/4964) so rolling_apply works on non-numeric columns as well.

I followed instructions [here](https://github.com/pydata/pandas/blob/master/CONTRIBUTING.md) but I'm not sure where to add documentation in the [release notes](https://github.com/pydata/pandas/blob/master/CONTRIBUTING.md#documenting-your-code). 

Also would like to get feedback on the code and complete any code changes before adding to documentation.

this would be after #11603 

but you don't actually want to modify `roll_generic`, rather you want to have different functions for different dtypes based on there input. So would need to modify the templates to generate `object` ones (which is prob useful), otherwise coerce to float.
 Are the #11603 changes already in master?

I thought about creating a different rolling_\* function for each dtype but the logic would be almost identical to rolling_generic() with changes in the dtype of input and a couple of dtype changes in the function.

It seemed cleaner (and DRY) to always give it a float as 'input' and give it another numpy array called array_to_roll when we have a non-float type we wish to roll over. Are you concerned about performance? I was unsure if coercion should be exposed to user and if it should default to True, but optimized for speed - anyhow, moot points if that's not the route we wish to go.

But curious if you prefer different but almost identical functions to `roll_generic` for each non float dtype. I can certainly give this a go in another branch, and we can see how similar the functions are then discuss further. 
 @sandhujasmine we use template generation to handle the differnt dtypes, see `src/generate_code.pyx`. you would end up with `roll_generic_float64` and `roll_generic_object`. These refer to the input types (you can also use a fused type for this, look for the `numeric` type). but we usually have a separate routine for `object` as well, as it sometimes needs customization.
further its possible to have a matrixed set of input/output types (but I don't really like this), and would instead assert that the input type produces the same output type (and if it doesn't then it would raise and we would just use the `roll_generic_object` anyhow.
