Added lazy service loading mechanism

The Plugin annotation now has a "lazy" attribute. If true, the
ServiceHelper will not load these services during its first loadServices
pass.

After loading the non-lazy services, standard calls to the Context's
getService(Class) method will check the lazy service list for a matching
service, if an implementation was not already loaded.

NB: these changes require the Context to maintain a reference to a
ServiceHelper.

ServiceHelper has a canLoadLazy() flag to determine if it is capable of
loading lazy services or not (that is, if loadServices() has already
been called or not).