Boost intrusive pointer

This replaces `IECore::IntrusivePtr` with the standard `boost::intrusive_ptr`, with the rationale explained in the first commit message. It also updates some APIs to return raw pointers where they used to return smart pointers, following the conventions laid out in RefCounted.h.

This does affect client code, with the following changes being necessary :

- Replace references to `IECore::IntrusivePtr` with `boost::intrusive_ptr`. There should be few (if any) of these since we use typedefs.
- Replace calls to `IECore::staticPointerCast` with `boost::static_pointer_cast`, `IECore::constPointerCast` with `boost::const_pointer_cast` and `IECore::dynamicPointerCast` with `boost::dynamic_pointer_cast`.
- Use `intrusive_ptr::get()` to cast to a raw pointer.

I'm about to make an equivalent pull request for Gaffer - the two will need to be merged together.