Feature encapsulate drone model

I encapsulated access to the Drone object model. 
It's a good OO practice that will allow us to update the underlying implementation while having the public interface remain consistent.

I also added a `AbstractDrone` interface that defines the set of functionality expected from a `Drone` implementation. By using that interface in place of concrete implementations (i.e: method arguments type), we are able to easily switch the `Drone` object used by the app (i.e: testing scenario, restricted use cases where all the functionality is not required, etc...).