added tests for remaining public methods, events
needs is an array, not an object
fixed expand() for one component case
keys are not ordered, converted to array, updated abstract's implementation of needs()