pub fn maze_directions2d(
in_maze: &Vec<Vec<bool>>,
moverules: &AllowedMoves2D,
from: &(usize, usize),
goal: &(usize, usize)
) -> Option<Vec<usize>>
maze_directions2d - feed it a maze Vec<Vec>, x y axis movement rules (like nw, ne, south), entrance and exit coordinates and it should return Some(one of the very fastest
paths through the maze), None() for no path, and a empty vec for a entrance and exit that are the same. Decode the steps taken on the path with the allowed move list.
(If your move list is vec!(north, south, east, west, upside_down), a path of 0, 0, 2, 4 would be 'north, north, east, upside down")