[Proposal] Made mass assignment functions more efficient.

Currently, a mass assignment call will loop over every single entry in the array passed in to the function.  

The changes I made check if fillable has been set for the given model, and if it has, only looks over keys that are in the fillable array.  This can have drastic performance gains whenever somebody may have previously passed in a flat array, but only need a couple of items from that array.  

Take this for example

```php
class Person extends Eloquent{
    $table = 'people';
    $fillable = ['first_name','last_name','age','height','weight'];
}
class Car extends Eloquent{
    $table = 'cars';
    $fillable = ['year','model','miles'];
}
class CreateStuff{
    public function makeStuff(){
        $input = [
            'first_name' => 'John',
            'last_name' => 'Doe',
            'age' => 40,
            'height' => '5\'11"',
            'weight' => '180lbs',
            'year' =>1981,
            'model' => 'DeLorean DMC-12',
            'miles' => -30000
        ];
        \Person::create($input);
        \Car::create($input);
    }
}
```

As the fill function is now, the entire array will be iterated over twice; once for each object.   With the new implementation, only the data needed (provided in fillable) will be read, meaning each thing will only be read once.

[Here](http://paste.laravel.com/O3J) is some benchmark data that I gathered using this (pretty ugly) test

```php
<?php
/**
 * Created by IntelliJ IDEA.
 * User: jbarber
 * Date: 9/4/13
 * Time: 8:31 AM
 * To change this template use File | Settings | File Templates.
 */

class FillTest extends TestCase {

    public function testFiller()
    {
        for($j = 100; $j <= 2000; $j+=100)
        {
            for($i = 1; $i <= 10; $i++)
                $this->runFills($j,$i);
        }
    }

    private function runFills($testNumFills, $testArrayLength)
    {
        \Log::error("Test for ".$testNumFills." fills with ".($testArrayLength-1)." unused and 1 used item.");
        file_put_contents( 'test_data2.txt', "Test for ".$testNumFills." fills with ".($testArrayLength-1)." unused and 1 used item.\n", FILE_APPEND);
        $this->runFillsNew($testNumFills,$testArrayLength);
        $this->runFillsOld($testNumFills,$testArrayLength);
    }

    private function runFillsNew($testNumFills, $testArrayLength)
    {
        $total = 0;
        $count = 0;
        for($i = 0; $i<$testNumFills; $i++)
        {
            $ar = $this->getRandomArray($testArrayLength);
            $email = new \Email;
            $time = -microtime(true);
            $email->fill($ar);
            $time += microtime(true);
            $total += $time;
            $count++;
            $email->save();
        }
        $msg = "\tNew Way:\n\t\tTotal Time:   ".$total."\n\t\tAverage Time: ".($total/$count)."\n";
        \Log::error("NEW WAY:");
        \Log::error("\tTotal time:   ".$total);
        \Log::error("\tAverage time: ".($total/$count));

        file_put_contents( 'test_data2.txt', $msg, FILE_APPEND);
    }

    private function runFillsOld($testNumFills, $testArrayLength)
    {
        $total = 0;
        $count = 0;
        for($i = 0; $i<$testNumFills; $i++)
        {
            $ar = $this->getRandomArray($testArrayLength);
            $email = new \Email;
            $time = -microtime(true);
            $email->fillWithAttributes($ar);
            $time += microtime(true);
            $total += $time;
            $count++;
            $email->save();
        }
        $msg = "\tOld Way:\n\t\tTotal Time:   ".$total."\n\t\tAverage Time: ".($total/$count)."\n\n";
        \Log::error("OLD WAY:");
        \Log::error("\tTotal time:   ".$total);
        \Log::error("\tAverage time: ".($total/$count));

        file_put_contents( 'test_data2.txt', $msg, FILE_APPEND);
    }

    private function getRandomArray($entries)
    {
        $return = ["email_address" => "me@you.com"];

        for($i = 0; $i < $entries-1; $i++)
        {
            $return[$this->randomString(10)] = $this->randomString(10);
        }
        return $return;
    }


    private static $charSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    private function randomString($length)
    {
        $result = '';
        for ($i = 0; $i < $length; $i++)
        {
            $result .= self::$charSet[mt_rand(0, 61)];
        }
        return $result;
    }
}
```

Email is a model that only requires an email_id.  It also has columns for created_at, updated_at, and an incrementing Id.

Something worth noting in the benchmark (and the main reason I bring this up) is that the new method performance is always almost identical regardless of the contents of the array, while the old method progressively gets worse performance as more unused items are added.