Replaced IECore::IntrusivePtr with boost::intrusive_ptr.

IntrusivePtr had an implicit conversion to raw pointer which was good for the lazy, but it also had several problems compared to intrusive_ptr :

- The implicit conversion to raw pointer is dangerous. Functions that return a new Ptr because they expect you to take ownership (like Object::copy()) can be used as * = copy(), leaking memory.
- http://code.google.com/p/cortex-vfx/issues/detail?id=37&colspec=ID%20Status%20Component%20Type%20Priority%20Owner%20Summary
- IntrusivePtrs lack C++11 move constructors and assignment.

This forces the developer to call get() to retrieve a raw pointer from a smart pointer, which results in a lot of small changes to the code. But being forced to think a little bit about ownership semantics isn't such a bad thing.
Removed staticPointerCast, constPointerCast and dynamicPointerCast.

The standard boost::static_pointer_cast, boost::const_pointer_cast and boost::dynamic_pointer_cast functions should be used in their place.