Attempts to fix Issue #1640 - More generalised version of TextInput to add a a"managed" mode

This attempts to fix #1640, improves on the previous version with generalisations suggested by @akshayaurora in last pull request (https://github.com/kivy/kivy/pull/1641).

Changes:
- Adds keyboard_mode ``OptionProperty`` to select between "managed" and "auto" modes
- Adds keyboard_visible ``BooleanProperty`` which changes keyboard visibility depending on state (depends on mode)
- Adds two convenience functions: ``show_keyboard()`` and ``hide_keyboard()`` to hide and show the virtual keyboard if it is in managed mode