Support for Locking on Objects and Collections

Added easy transactions from objects:

```php
<?php

$llama = new Animal('llama');

$llama->transaction(function($obj) {
   $obj->save();
});
```

Added a way get row locks on an object:

```php
<?php

$llama = new Animal('llama');

$llama->transaction(function($obj) {
   $obj->lock();
});
```

Note that the above will throw a `StaleObjectException` if the object has changed in the database between the initial select and when the lock is acquired. To prevent this problem, fetch the original object with a lock:

```php
<?php

Animal::transaction(function() {
   $llama = Animal::findByType("llama")->lock()->one();
   // act on the llama 
   $llama->save();
});
```