Add factory interface and default implementation
* Fix doc comments and cs
* Add UnknownComponentTypeException
* Add getComponents method to Component class
* Refactor geocoding request cache mechanism