Support all signed and usigned interger types as primary key type

With this modification is now possible to use any integer type for the primary key value.

If I have a data type, eg:
```go
type Animal {
    Counter     uint64 `gorm:"primary_key:yes"`
}
```
before this modification the instruction:
```go
db.First(animal, uint64(888))
```
would be resolved in the wrong query:
```sql
SELECT * FROM Animals ORDER BY counter DESC LIMIT 1
```
The where clause is totally skipped.

With this modification the generated query is the expected one:
```sql
SELECT * FROM Animals WHERE counter = 888 ORDER BY counter DESC LIMIT 1
```
No, they're necessary.  If we want to support every integer type we must do this in this way.
We cannot cast to type int only, we have to handle every type and this is the only way.

I'm using my for in a project of mine and it works well. I'll add tests as soon as possible (In my fork I've implemented defaults value too. It will be my next pull request)