No extra async calls

This addresses one of @piscisaureus concerns, in that extra calls were being made to `AsyncWrap` that were unnecessary. `WeakObject` was removed because it required all inheriting classes were made weak, and was replaced with `BaseObject` which was made to handle simple things relating to the `Persistent<Object> handle` that is part of all `*Wrap` class instances. The major difference is that `MakeWeak` is now optional.