tracks should be accessible even if at() has not yet been called.
return points as useful hashes instead of arrays

TODO: value objects
add github link