Maid 413 modify and update cereal

`<1>` For `non-void` type deduction by `decltype`, the functions should have an explicit return mentioned. Not having this is UB and also breaks build for codes with serializing function signatures similar to the one below:
```
struct Cerealizable {
  template
  Archive& serialize(Archive& ref_archive) {
    return ref_archive(stuff_0, stuff_1);
  }

int stuff_0 {}, stuff_1 {};
};
```
Build error in GCC with `-Wall -Werror` flags.

Correcting that in cereal code.

`<2>` Adding support for boost_optional in cereal from [Link to source code]( https://github.com/stevehickman/cereal/blob/master/include/cereal/types/boost_optional.hpp)