Modify OOP system to delay most of the work for enyo.kind() until the kind is used for the first time. This deferral only happens if the kind has no static members, it has a name, and it doesn't have a truthy "noDefer" property.
Set enyo.Object, enyo.Component, and enyo.Control to noDefer since code runs at startup time to modify those kinds after definition.

Enyo-DCO-1.1-Signed-Off-By: Ben Combee (ben.combee@lge.com)
Rename enyo.kindFinish to enyo.kind.finish to avoid cluttering enyo namespace
Clear "inProps" when done with enyo.kind.finish() call to release memory from closure
Use enyo.delegate instead of Object.create for older browser support
Rename enyo.delegate's argument to be clearer

Enyo-DCO-1.1-Signed-Off-By: Ben Combee (ben.combee@lge.com)
Move some statics definitions into a new "protectedStatics" list that won't trigger immediately enyo.kind creation but will allow deferral.

Enyo-DCO-1.1-Signed-Off-By: Ben Combee (ben.combee@lge.com)
Quote kind names in kind configuration objects to avoid holding onto early constructors from enyo.kind deferral

Enyo-DCO-1.1-Signed-Off-By: Ben Combee (ben.combee@lge.com)