Added maps for tiles for better accessibility

The actor and staticElement field of level are now maps from identifiers to the
actual data. This gives a level the ability to identify a tile by its id.

I also added a coordinate to list of identifier map. This allows to get all
tiles that locates at a specific coordinate.
added fromString, which creates a level from a string

The fromString function takes also a TileBuilder, which translates
individual chars from the level string to either actors or static
elements.

I extracted the functionality of getting the next free id from
createTask into its own function. The function freshID returns the next
free id and increments the appropriate field in the level type.
Add Data.Default package

Instances of the default type class can be created via 'def'
Add PathFinderState ADT

The PathFinderState ADT keeps track of the required state for A*
Add PathFinderConfig

The PathFinderConfig decouples the path finder from external
dependencies on e.g. the Level by passing in a config ADT which provides
required methods like checking if a cell can be walked or not.
Add the PathFinder type

The PathFinder is a newtype that makes use of a ReaderT and StateT
transformer to allow access to the PathFinderState and PathFinderConfig
ADT, respectively.
Extend PathFinder with visit and expand functions

Some new methods:

- expand: Retrieve all possible neighbors of a cell
- expandUnvisited: expand and filter by visit status
- alreadyVisited: check if the cell has already been visited
- visit: perform the state effects necessary when visiting a cell
added toString, which renders a level to a string

The function has to know the boundaries of the level, so I added a field
to the level type to store this information. The toString function
basically maps over a two dimensional list of coordinates, pulls the
tiles at this position out of the level and renders the top most to a
char.
Resolve some suggestions from hlint

No logic changes, just remove some redundant brackets and swapped
`catMaybes $ map ...' with mapMaybe as suggested.
Add exec- and evalPathFinder (equivalent to State)
Merge branch 'level-creation' into develop
Switch from 2d tuple coords to 3d Coord adt

Also introduced helper methods from2d and to2d to make the switch easier
Fixing syntax error
Refine findPath
Merge branch 'develop' into path-finding

Conflicts:
	src/Level.hs
	test/TaskSpec.hs
Finish findPath functionality