Support for generics in job types

This patch allows generic types to be used in jobs. Currently it is not  possible to schedule recurring jobs like this:

```C#
            RecurringJob.AddOrUpdate<ELScheduledTask<UpdateReports>>("UpdateReports", r => r.Execute(), Cron.Daily(3));
            RecurringJob.AddOrUpdate<ELScheduledTask<UpdateActiveLoansTask>>("UpdateActiveLoans", r => r.Execute(), Cron.Daily(3));
```

Because it generates same job id  - **ELScheduledTask`1**. And this typename is displayed in dashboard. Logic that formats type name and method name is extracted to **Job.GetTypeAndMethod** and it is called from   **RecurringJob** and **HtmlHelper**. Unit tests were added too.