Cleanup constraint api

This reshapes some of the constraint API to embrace the fact that we don't have a good way to specify arbitrary constraint predicates, and removes pre-emptively separated implementation. Better to refactor the implementation once we start adding new constraint types, YAGNI and all that, we don't know what things will look like yet.

On the topic of refactoring, this moves all schema implementation classes related to the core API out of the org.neo4j.kernel package. Because they are implementation classes, they should not be in org.neo4j.kernel, because that package is exposed as public API.

This is part of the analysis of future-compatibility for the new schema API classes, which on the whole was quite positive. We should be able to iterate on this, and when we come up with a good way to programmatically talk about arbitrary constraint and index predicates, we will be able to modify the API to our liking without breaking our backwards compatibility policy.