A framework for parsing endf files in c++

This is an admittedly very rough idea on flexibly parsing endf files in c++ (but it does work). Before this gets merged the only thing someone who wants to extend it should need to write is the `read_xxx` function where `xxx` is the mt number and write the struct derived from `mt_base_struct` (and maybe edit the xdressrc if I go that direction). The decision trees and cython layer will all be autogenerated.
I think that we should have one map per struct type to simplify memory management.  It is either that or have an internal pointer map, manage all of the memory ourselves and then have a templated lookup function.  For clarity, where T is some mt struct type

```c++
class Library {
 public:
  Library() {...};
  ~Library() {
    for (it = mt_bases_.begin(); it != mt_bases+.end(); ++it)
      delete it->second;
  }

  template <class T>
  T* get(int mat, int mt, int mf) {
   endfid id = {mat, mt, mf};
   return reinterpret_cast<T*>(mt_bases_[id]);
  }

  // and for fun
  template <class T>
  T* get(endfid id) {
   return reinterpret_cast<T*>(mt_bases_[id]);
  }

 private:
  std::map<endfid, mt_base_struct*> mt_bases_;
}
```

I prefer this accessor method in this case because it simplifies the understanding that the user needs to have to use the library.