Add interfaces for existing classes

Main goal: While this branch is finished, almost each of  the concrete class should have its own interface  and implements it. For example, BWTile should implement BWITile.
Also, some of the classes are renamed and updated.