Bug 1097861 - make CycleCollectionNoteChild more easily forward-declarable; r=mccr8

Forward declaring functions with default arguments is difficult.  If you try to say:

template<typename T>
inline void
CycleCollectionNoteChild(nsCycleCollectionTraversalCallback& aCallback,
                         T* aChild, const char* aName, uint32_t aFlags);

and then later have:

template<typename T>
inline void
CycleCollectionNoteChild(nsCycleCollectionTraversalCallback& aCallback,
                         T* aChild, const char* aName, uint32_t aFlags = 0);
{
  ...
}

the compiler complains that default arguments cannot be added to a
function template that has already been declared.  If you attempt to
mollify the compiler by declaring instead:

template<typename T>
inline void
CycleCollectionNoteChild(nsCycleCollectionTraversalCallback& aCallback,
                         T* aChild, const char* aName, uint32_t aFlags = 0);

the compiler then complains about redefining the default argument (!)
when an actual definition is found.

To circumvent this, manually implement "default" arguments by providing
a three-argument form of CycleCollectionNoteChild, which simply forwards
to the four-argument version.
Bug 1095541 - part 1 - move nsRefPtr nsCOMPtr_helper overloads out-of-line; r=bsmedberg

Doing this means that instantiations of nsRefPtr<T> won't require
nsCOMPtr_helper::operator() to be defined.  Only actual uses of the
overloads will require the definition.
Bug 1095541 - part 2 - move already_AddRefed to its own header file; r=bsmedberg
Bug 1095541 - part 3 - remove nsCOMPtr.h #include from nsRefPtr.h; r=bsmedberg