events: removeListener add checks and cleanup

Remove unecessary splice for single listener events. Add type check for
"type" argument.
events: _events to object and undefined not null

By making sure the _events is always an object there is one less check
that needs to be performed by emit.

Use undefined instead of null. typeof checks are a lot faster than
isArray.

There are a few places where the this._events check cannot be removed
because it is possible for the user to call those methods after using
utils.extend to create their own EventEmitter, but before it has
actually been instantiated.
events: additional type check for addListener

Check both passed args to addListener.

Place var at beginning.

Switch warned to _warned. Seemed inconsistent to have some internal
properties start with _ and others not.
events: emit cleanup

Cleanup check logic. Place vars at top. Remove PROCESS.

This commit is to make the next couple commits a lot easier to
implement.
events: remove once() listener wrapper

The wrapper around once methods will make it difficult for binding
listeners. So instead a flag is set to let emit know the listener needs
to be removed.

The additional check in emit causes a small performance hit,
but not as much as will be gained after the binding change.