Added Entity AI API

Simple and easy to use AI API for (living) entities.

**Added**
- AIControlled (extends Entity)
- [AIHandler](https://github.com/ST-DDT/SpongeAPI/blob/entityAI/src/main/java/org/spongepowered/api/entity/ai/AIHandler.java#L34)
  - GoalBasedAIHandler (vanilla)
    - AIGoalEntry
    - AIGoal
      - [CustomAIGoal](https://github.com/ST-DDT/SpongeAPI/blob/entityAI/src/main/java/org/spongepowered/api/entity/ai/CustomAIGoal.java#L31) (for plugins)
    - [AIRequirement](https://github.com/ST-DDT/SpongeAPI/blob/entityAI/src/main/java/org/spongepowered/api/entity/ai/AIRequirements.java#L34) (replaces mutex bit mask)
- [BodyController](https://github.com/ST-DDT/SpongeAPI/blob/entityAI/src/main/java/org/spongepowered/api/entity/ai/BodyController.java#L38) (Move + Look)

**ToDo/TBD**
- `GoalType` (RandomStroll, DefendTamer....)
- Class and method names
- Improve `BodyController`
  - Flags (OpenDoors, CanSwim, AvoidLight ...)
  - Move Body parts?
- More `AIRequirement`s?
- `PhysicsHelper` (Shoot arrows/projectiles (aiming support) etc)
- Merge `Agent` and `AIControlled` in either `ai` or `living` package

**Example**
````java
GoalBasedAIHandler aiHandler = (GoalBasedAIHandler) entity.getAIHandler();
List<AIGoalEntry> goalEntries = new ArrayList<AIGoalEntry>();
// - loot at player
AIGoal lookAtPlayer = new CustomAIGoal() {

    Set<AIRequirement> aiRequirements = ImmutableSet.of(AIRequirements.LOOK);
    Player player = null;

    public AIControlled getEntity() {
        return entity;
    }

    public Set<AIRequirement> getAIRequirements() {
        return aiRequirements;
    }

    public boolean shouldExecute(final boolean isRunning) {
        player = getClosest();
        return player != null;
    }

    public boolean isInterruptible() {
        return true;
    }

    public void execute(final boolean isRunning) {
        entity.getBodyController().lookAt(player, BodyController.DEFAULTROTATIONSPEED);
    }

    public void abort() {
        player = null;
    }
};
// - follow Player
AIGoal followPlayer = new CustomAIGoal() {

    Player player = null;

    public AIControlled getEntity() {
        return entity;
    }

    Set<AIRequirement> aiRequirements = ImmutableSet.of(AIRequirements.MOVE);

    public Set<AIRequirement> getAIRequirements() {
        return aiRequirements;
    }

    public boolean shouldExecute(final boolean isRunning) {
        player = getClosest();
        if (player == null) {
            return false;
        } else {
            return player.getLocation().getPosition().distance(entity.getLocation().getPosition()) < 15;
        }
    }

    public boolean isInterruptible() {
        return true;
    }

    public void execute(final boolean isRunning) {
        entity.getBodyController().tryMoveTo(player, BodyController.DEFAULTMOVEMENTSPEED);
    }

    public void abort() {
        player = null;
    }
};
// create and set goal entries
final AIGoalEntry lookAtPlayerEntry = new AIGoalEntry(lookAtPlayer, 1);
goalEntries.add(lookAtPlayerEntry);
AIGoalEntry followPlayerEntry = new AIGoalEntry(followPlayer, 1);
goalEntries.add(followPlayerEntry);
goalEntries.add(new AIGoalEntry(new IdleAIGoal(entity), 2));
aiHandler.setGoalEntries(goalEntries);
````