Create Placement class and implement its interface (squashed)

commit 2ada4ad22b7caf4552e8c275a8d72877f3f6a2f3
Author: Matias Anaya <matiasanaya@gmail.com>
Date:   Sat Sep 6 23:16:58 2014 +1000

    Implement placement.report()

commit 47c31e76328bb9c16ffa1200624df0cd51db3d0c
Author: Matias Anaya <matiasanaya@gmail.com>
Date:   Sat Sep 6 23:09:47 2014 +1000

    Implement placement.rotate!()

commit a8748c22ae7d52a27510c57f8d674bf266f062cf
Author: Matias Anaya <matiasanaya@gmail.com>
Date:   Sat Sep 6 22:23:23 2014 +1000

    Implement placement.adjacent()

commit 8341774766690e3d622f93cd3ab7e1bbf4d014b4
Author: Matias Anaya <matiasanaya@gmail.com>
Date:   Sat Sep 6 20:06:53 2014 +1000

    Create Placement Class and implement placement.update!()