Adds weak reference support

Most memory leaks are caused by circular references. CCWeakPointer is created to solve this problem.

## Usage:

```
CCDictionary *obj = new CCDictionary()
CCWeakPointer<CCDictionary> ref1(obj);  
CCWeakPointer<CCDictionary> ref2;
ref2 = ref1;
ref2.getObject(); // obj
CC_SAFE_RELEASE_NULL(obj);
ref2.getObject(); // NULL
```

## Efficiency:

The only overhead is `releaseWeakReferenceFor(this);` called in `CCObject::~CCObject()`. But the time it takes is really negligible. It runs at O(lgN) time, in which N is the amount of CCObjects been weakly referenced.