EDBI operation improvements

* introduced API methods for
    * retrieving all Index instances
    * removing an Index and related schema objects
* improved `Operation` class hierarchy in edbi jdbc implementation
* implemented drop methods for schema objects

the Operation subclasses all implement the executeWith(OperationExecutor) method, where they call the OperationExecutor#execute(X) method, where X is bound to the signature of the respective Operation type (because within e.g. InsertOperation, executor.execute(this) is called, the invocation is bound to OperationExecutor#execute(InsertOperation).

So it's an IoC call chain: OperationExecutor calls executeWith on the given Operation -> The specific Operation implementation then calls the correct OperationExecutor#execute method, passing itself as argument.

Hope that clears it up.