Failure and success callbacks on sync

This adds two optional arguments to the constructors of `link` and `directional_link`, 

* a `success` callback, with no argument
* a `failure` callback, which is called in case of trait error, and takes one argument, the trait error. 

In the case where no failure callback is provided, the trait error is re-raised, therefore keeping the old behavior.

Besides, the wiring of the `on_trait_change` is done in the `finally` close, so that they occur even if the initial synchronization was unsuccessful. 

An example of usage is provided bellow, where we use the traitlet machinery to validate Unicode strings based on some criterion (the length in that case). 

```Python
from IPython.utils.traitlets import *

class Unicode3(Unicode):
    
    def __init__(self, **metadata):
        super(Unicode3, self).__init__(**metadata)
        
    def validate(self, obj, value):
        value = super(Unicode3, self).validate(obj, value)
        if len(value) > 3:
            raise TraitError('The string is too long')
        return value
```
```Python
class string(HasTraits):
    v = Unicode()
    
class short_string(HasTraits):
    v = Unicode3()

x1, y1 = string(), short_string()
x2, y2 = string(), short_string()
```
```Python
def success():
    print 'ok'
def failure(e):
    print e.message

link((x1, 'v'), (y1, 'v'), success=success, failure=failure)
dlink((x2, 'v'), (y2, 'v'), success=success, failure=failure)
```
```Python
x1.v = 'abd'
print y1.v
```

Ping @minrk as we discussed this idea on gitter. Let me know what you think!