refactor identifiable

Use an identifier which can either be a URI or a plain string. This is
necessary to handle URI nodes and bnodes equaly as the source of an
identifiable's identifier, because bnodes are not labeled with an URI
but rather an arbitrary string identifier.
explicitely get graph levels in reverse order

Add methods to get levels in extension order.
add service with an endpoint to invoke the planner