LMSPluginManager

Dodano wsparcie dla pluginów.

Działa to tak, że ładowane są pluginy zdefiniowane w uiconfig w zmiennej phpui.plugins. Zmienna ta powinna wyglądać następująco: 
<NazwaPluginu>:<priorytet>;<NazwaInnegoPluginu>:<priorytet>
Plugin o wskazanej nazwie powinien znajdować się w katalogu plugins, powinna to być klasa o takiej samej nazwie.
Biblioteka oferuje wsparcie dla wielu pluginów ładowanych jednocześnie (można nawet załadować ten sam plugin kilka razy).
Wraz z biblioteką dodano przykładowy plugin, w którym można podejrzeć jak to powinno działać. Zmodyfikowano moduły welcome i useradd dodając w nich zaczepy wywołujace pluginy. Pokazano w jaki sposób można podmienić szablon, rozszerzyć walidację, dodać logowanie zdarzeń. Wraz z wywołaniem pluginów można (ale nie trzeba) przekazać do nich dane które mogą podlec modyfikacji. Dane te są współdzielone pomiędzy pluginami, można to sobie wyobrazić jak potoki gdzie dane na wyjściu jednego pluginu mogą być danymi na wejściu kolejnego. Z tego powodu zapewniono możliwość priorytetowania pluginów. 

Wykorzystano biblioteki phine/lib-observer i phine/lib-exception. Bibioteki te dodano do lib, ale moga one także zostać załadowane przy pomocy composera, ale to kwestia ustalenia czy będziemy w LMS wykorzystywać composera do instalacji zewnętrznych bibliotek.

W przyszłości napiszę bardziej obszerny opis tego mechanizmu i opublikuję tu lub na grupie dyskusyjnej (o ile wejdzie to do LMS).