Allow for Eloquent model attributes to be type juggled (casted).

Right now if you retrieve an attribute from an Eloquent model, it may not be in the right format. For example, a `boolean` value in the database will be returned as an `integer` because Eloquent has no knowledge about the table schema.

This PR solves this problem by providing the `$cast` array where you can specify default set/get attribute types for Eloquent model attributes. Here's an example.

```php
<?php

class Book extends Eloquent
{
    protected $cast = [
        'name'          => 'string',
        'read'          => 'bool',
        'read_when'     => 'date',
        'price'         => 'double'
    ];
}
```

Now all of the attributes provided as keys in the above array, are set and retrieved in the appropriate type. As you can see, dates have been added to this `$cast` array as a replacement for `$dates` due to their similarity. This change has been made backwards compatible, and will respect the original `$dates` array to allow for hotfix.
Can't this be done once in the `boot` method? Just augment the `casts` property and be done with it. Do we really have to spin through all this for *every single* attribute?