Attempt to resolve issue/enhancement #12 by adding a preprocessor that merges injections instead of overriding superclass injections.
Update inject preprocessor to handle cases when object or superclass injections are declared as a string list, an array of strings, or an object. Also ensure that child object injections overwrite superclass injections having the same identifier.
Add Jasmine specs to test various injection merge scenarios.
Introduced live component event bus and View Controller support for live component selectors.

Added LiveEventBus for subscribing to component for a view-relative selector - which automatically adds and removes listeners whenever matching components are added to or removed from the view.
Refactored ViewController to decompose the representation of registered selectors and listeners into new private ComponentSelector and ComponentSelectorListener classes.
Added support for live component selectors in ViewControllers, leveraging LiveEventBus.
Added support for specifying selectors in the ViewController config annotation that match more than one component, which automatically generate ViewController getters that return an Array of matches.  (This applies to both live and fixed selectors.)
Revised all CoffeeScript `requires` class annotations for consistency.
Updated deft-debug.js and deft.js builds.
Added corresponding Jasmine unit test cases to cover these enhancements.

Fixes #5
Added ant build script.
Tweaked LiveEventBus to support Sencha Touch.

Added an override for `Ext.Component::setParent()` to fire the same `added` and `removed` events dispatched by Ext JS.
Migrated `Ext.Component` overrides from `Deft.event.LiveEventListener` to `Deft.event.LiveEventBus`.
Tweaked `Deft.mvc.ViewController` unit test to run happily with Sencha Touch 2.01 (which passes an extra argument when firing events).
Tweaked Jasmine configuration with temporary workaround to constrain pretty print traversal depth (default is 40 levels) - attempts to pretty print Sencha classes or class instances would otherwise lock up the browser and provide overly verbose error messages.
Updated deft-debug.js and deft.js builds.

Fixes #5
Exposed public View Controller API for adding component references and component selectors / listeners.

Further refactored `Deft.mvc.ViewController` to separate the private method previously responsible for adding component references and listeners for a given selector into two public methods, with corresponding get and remove methods.

Fixes #4
Implemented workaround for injecting configs into Ext JS Ext.Component subclasses

Added corresponding Jasmine unit test.

Fixes #23
Tweaked unit tests to workaround Ext JS bug.

Changes in Ext JS 4.1.1 reveal a bug where `Ext.util.Observable::hasListener()` returns inaccurate information after `Ext.util.Observable::clearListeners()` is called.
Introduced a workaround suggested by @brian428.
Added @brian428 to the Deft JS team.
Tweaked README.md

Re-ordered team members by last name.
Merge branch 'deft_inject_merge' of git://github.com/brian428/DeftJS
Deft.Logger.log(), etc. now calls Ext.log() in Ext JS

Changed the logic in `Deft.Logger` to detect Ext JS using `Ext.getVersion( 'extjs' )` and send all logging through `Ext.log()` for Ext JS and through `Ext.Logger.*` for Sencha Touch.

Fixes #36
Fixed Jasmine SpecRunner to be Sencha class system aware.

Fixes #37
Refactored `inject` and `controller` class preprocessors to support `onClassExtended`

Added deprecation warnings for `Deft.mixin.Controllable` and `Deft.mixin.Injectable`.
Added `$injected` and `$controlled` instance flags to be used in future tooling.
Refactored to retain `inject` and `controller` values (previously cleared using the delete operator) to be used in future tooling.
Introduced `Deft.core.Class::registerPreprocessor()` as a facade to hide differences between Ext JS 4.0 and Ext JS 4.1 / Sencha Touch 2.0.
Revised submitted `Deft.mixin.Injectable` Jasmine unit tests for cross-browser compatibility -  removing assumptions about the order of values returned by `Ext.Object.getValues()`.
Revised submitted `Deft.mixin.Injectable` Jasmine unit tests to ensure injection occurs before the subclass constructor fires (rather than the mix-in annotated class or base class).
Revised `Deft.mixin.Controllable` Jasmine unit tests to validate functionality under various scenarios where the constructor might be omitted from a participating class.
Updated deft-debug.js and deft.js builds.

Fixes #12
Fixes #30
Fixes #32
Hotfix for ext-dev.js support.

Refactored and removed `requires` for `Ext.ComponentManager` and `Ext.ComponentQuery` to ensure Deft JS classes load in the expected order without incorrectly triggering the loader to load classes already defined in deft-debug.js or deft.js.
Updated deft-debug.js an deft.js builds.
Hotfix for 'inject' and 'controller' class preprocessors.

Resolved RTEs when a constructor calls`this.callParent()` on a class that has both the `inject` and `controller` class annotations.
Caused by lack of Sencha class system book-keeping metadata on manually added interceptor functions (ex. $previous, $owner).
Refactored the 'inject' and 'controller' class preprocessors to leverage `Ext.Base::override()` to intercept and override class constructors.
Added additional facade methods to `Deft.Class` to smooth out differences between Ext JS 4.0 and Ext JS 4.1 / Sencha Touch 2.0's APIs.
Updated deft-debug.js and deft.js builds.

Fixes #12
Fixes #30
Fixes #32
Tweaked Ext.Logger::verbose() for Ext JS compatibility.

Maps 'verbose' level to 'info' level.
Hotfix for combined used of 'inject' and 'controller' class preprocessors.

Tweaked  `Deft.core.Class::hookOnClassExtended` to support multiple hooks registered to the same data instance.
Otherwise, whichever `onClassExtended` hook was registered last would win.
Updated deft-debug.js and deft.js builds.

Fixes #12
Fixes #30
Fixes #32
Added an optional 'scope' parameter to Deferred/Promise callback registration.

Modified `Deft.promise.Deferred::then()`, `Deft.promise.Deferred::otherwise()`, and `Deft.promise.Deferred::always()` to accept a new parameter (or `scope` parameter within a configuration object) that defines the scope in which the specified callbacks should be executed.
Modified `Deft.promise.Promise::then()`, `Deft.promise.Promise::otherwise()`, and `Deft.promise.Promise::always()` to pass through all parameters to the corresponding methods in the backing `Deft.promise.Deferred`.

Fixes #33