Bug 1041411 - Create KeyboardApp and replace fakeAppObject +shepherd

May I know what is the rationale behind this change?
I think exposing a function in the interface like the original is better than exposing a property of an internal object.